@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。