小编典典

C++11 中的安全布尔成语是否已过时?

all

[@R的这个答案。MartinhoFernandes表明,safe-bool 习惯用法在 C++11
中显然已被弃用,因为它可以被一个简单的替换

explicit operator bool() const;

根据答案中的标准报价搂4 [conv] p3

T当且仅当声明格式正确时,表达式 e 才能隐式转换为类型T t=e;,对于某些发明的临时变量t(拥抱8.5)。某些语言结构要求将表达式转换为布尔值。对于某些发明的临时变量 t
(拥抱8.5),当且仅当声明格式正确时,出现 这种e上下文中的表达式被称为 上下文转换 为格式正确。bool
bool t(e);

突出显示的部分清楚地将“隐式显式转换”(在标准中称为“上下文转换”)显示为@R。马蒂尼奥说的。

需要“隐式显式转换”的“某些语言结构”似乎如下:

  • if, while, for( 搂6.4 [stmt.select] p4)
  • 二元逻辑运算符&&and ||(搂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)

我们在标题中的假设是否正确?我希望我们没有忽略任何潜在的缺点。


阅读 54

收藏
2022-08-03

共1个答案

小编典典

是的。这是仅具有隐式用户定义转换和显式用户定义转换运算符的问题 的示例,实际上 是因为这个问题而发明的,并用更清洁和更合乎逻辑的东西替换所有安全布尔的东西。

2022-08-03