最佳答案
@ 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)我们在标题中的假设正确吗? 我希望我们没有忽略任何潜在的缺点。