@R的这个答案。Martinho Fernandes表明,safe-bool 习惯用法在 C++11 中显然已被弃用,因为它可以被一个简单的替换
explicit operator bool() const;
根据答案中的标准报价§4 [conv] p3
:
对于某些发明的临时变量(第 8.5 节) ,
T
当且仅当声明格式正确时,表达式 e 才能隐式转换为类型。某些语言结构要求将表达式转换为布尔值。对于某些发明的临时变量 t(第 8.5 节),当且仅当声明格式正确时,出现在这种上下文中的表达式被称为上下文转换为格式正确。T t=e;
t
e
bool
bool t(e);
突出显示的部分清楚地将“隐式显式转换”(在标准中称为“上下文转换”)显示为@R。马蒂尼奥说的。
需要“隐式显式转换”的“某些语言结构”似乎如下:
if
,while
,for
(§6.4 [stmt.select] p4
)- 二元逻辑运算符
&&
and||
(§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
)
我们在标题中的假设是否正确?我希望我们没有忽略任何潜在的缺点。