[@R的这个答案。MartinhoFernandes表明,safe-bool 习惯用法在 C++11 中显然已被弃用,因为它可以被一个简单的替换
explicit operator bool() const;
根据答案中的标准报价搂4 [conv] p3:
搂4 [conv] p3
T当且仅当声明格式正确时,表达式 e 才能隐式转换为类型T t=e;,对于某些发明的临时变量t(拥抱8.5)。某些语言结构要求将表达式转换为布尔值。对于某些发明的临时变量 t (拥抱8.5),当且仅当声明格式正确时,出现 在 这种e上下文中的表达式被称为 上下文转换 为格式正确。bool bool t(e);
T
T t=e;
t
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
我们在标题中的假设是否正确?我希望我们没有忽略任何潜在的缺点。
是的。这是仅具有隐式用户定义转换和显式用户定义转换运算符的问题 的示例,实际上 是因为这个问题而发明的,并用更清洁和更合乎逻辑的东西替换所有安全布尔的东西。