最佳答案
@ R 的回答。Martinho Fernandes 显示,safe-bool 习惯用法在 C + + 11中显然已经被弃用,因为它可以被一个简单的
explicit operator bool() const;
根据答案 §4 [conv] p3
中的标准引用:
对于某些发明的临时变量
t
(8.5) ,当且仅当声明T t=e;
格式良好时,表达式 e 才能隐式转换为类型T
。某些语言结构要求将表达式转换为布尔值。在这样的上下文中出现的表达式e
被称为 上下文转换到bool
和 是格式良好的当且仅当声明bool t(e);
是格式良好的,对于某些发明的临时变量 t (8.5)。
突出显示的部分清楚地显示了@R. Martinho 所说的“隐式显式转换”(在标准中称为“上下文转换”)。
要求“隐式显式转换”的“某些语言结构”似乎如下:
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
)我们在标题中的假设正确吗? 我希望我们没有忽略任何潜在的缺点。