首页 >后端开发 >C++ >Safe-Bool 习语在 C 11 及更高版本中是否已过时?

Safe-Bool 习语在 C 11 及更高版本中是否已过时?

Patricia Arquette
Patricia Arquette原创
2024-11-27 02:27:12766浏览

Is the Safe-Bool Idiom Obsolete in C  11 and Beyond?

Safe-Bool 惯用法是 C 11 的遗物吗?

曾经在 C 中广泛使用的 safe-bool 惯用法现在面临着根据 C 11 引入的显式布尔转换运算符进行审查。根据 C 11 标准 (§4 [conv] p3),如果相应的变量声明格式良好,则表达式可以隐式转换为类型。这个概念称为“上下文转换”,允许直接将值分配给布尔变量。

安全布尔替换

C 11 之前,safe-bool 习惯用法用于提供对布尔转换的显式控制。它涉及定义一个具有显式名称的成员函数,例如返回布尔值的 is_valid() 或 is_active() 。然而,随着 C 11 引入显式运算符 bool() const;,开发人员现在可以为其类定义显式布尔转换运算符。

操作中的上下文转换

涉及以下语言结构的表达式需要上下文转换为布尔值:

  • 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)

答案

safe-bool 习惯用法在 C 11 中确实被认为是过时的。显式布尔转换运算符的引入提供了更清晰、更控制布尔转换的逻辑方法。通过允许直接赋值给布尔变量,上下文转换消除了对 safe-bool 习惯用法的需要,并简化了代码的可读性。

以上是Safe-Bool 习语在 C 11 及更高版本中是否已过时?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn