在C ++ 11中,安全布尔的习语显然已被弃用,因为它可以被简单的替换
explicit operator bool() const;
根据答案中的标准引用§4 [conv] p3:
对于某些发明的临时变量(§8.5),T当且仅当声明T t=e;格式正确时,表达式e才能隐式转换为类型t。某些语言结构要求将表达式转换为布尔值。对于某些发明的临时变量t(§8.5),当且仅当声明格式正确时,表示出e现在这样的上下文中的表达被上下文转换为bool并且格式良好bool t(e);。
突出显示的部分清楚地显示了“隐式显式转换”(在标准中称为“上下文转换”)为@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)
我们在标题中的假设是否正确?我希望我们不会忽视任何潜在的缺点。
汪汪一只猫
哆啦的时光机
噜噜哒
相关分类