@R的答案。Martinho Fernandes表明,C ++ 11中不赞成使用安全布尔习语,因为可以用一个简单的方法代替它
explicit operator bool() const;根据答案中的标准报价§4 [conv] p3:
T当且仅当声明T t=e;的格式正确(对于某些发明的临时变量t(第8.5节))时,表达式e才能隐式转换为类型。某些语言构造要求将表达式转换为布尔值。表达式e出现在这样的背景下被说成是上下文转换到bool和良好成形的当且仅当该声明bool t(e);是良好的形成,对于某些发明临时变量t(第8.5节)。
高亮部分清楚地将“隐式显式强制转换”(在标准中称为“上下文转换”)显示为@R。马丁尼奥说。
要求“隐式显式强制转换”的“某些语言构造”如下所示:
- if,- while,- for(- §6.4 [stmt.select] p4)
- 二进制逻辑运算符&&和||(§5.14 [expr.log.and/or] p1两者)
- 逻辑否定运算符!(§5.3.1 [expr.unary.op] p9)
- 条件运算符?:(§5.14 [expr.cond] p1)
- static_assert(- §7 [dcl.dcl] p4)
- noexcept(- §15.4 [except.spec] p2)
我们标题中的假设正确吗?我希望我们不要忽视任何潜在的缺点。
                
                30
              
                  +1:我喜欢这种类型的问题,可以教我有关即将到来的标准的新知识。
                
                
                  
                    —
                    比约恩博动
                    
                  
                
              
                  您知道标准中缺少什么隐式显式强制转换...从另一个返回某些内容
                
                  
                    —
                    David 
                    
                  
                
              operator bool。例如,如果我有一个shared_ptr名为p 的成员并具有以下方法:operator bool() const { return p; },则它将无法编译。那真是愚蠢的海事组织。
                
                  @David,“隐式显式”强制转换是什么意思?
                
                
                  
                    —
                    Sz。