为了账号安全,请及时绑定邮箱和手机立即绑定

C ++ 11中的safe-bool成语是否过时?

C ++ 11中的safe-bool成语是否过时?

C++
郎朗坤 2019-08-30 16:01:05
在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)我们在标题中的假设是否正确?我希望我们不会忽视任何潜在的缺点。
查看完整描述

3 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

是。这是仅存在隐式用户定义转换的问题的示例,并且由于这个问题而实际上发明了明确的用户定义转换运算符,并且用更清洁和更合理的东西替换所有安全bool的东西。


查看完整回答
反对 回复 2019-08-30
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

我不会称之为“过时”。不是每个人都在迈向C ++ 11(甚至不到1岁)。即使编写了大量的编码器,保持代码向后兼容的能力也是必须的,考虑到这种习惯看起来对于图书馆比对于正确的程序更合理。


查看完整回答
反对 回复 2019-08-30
?
噜噜哒

TA贡献1784条经验 获得超7个赞

我不得不因为分歧而不得不投票,尽管我会亲自给你买啤酒并说“嘿嘿没有感情”。但是--std=c++0x,在最终钉子进入标准棺材之前很久,C ++ 11中的许多范例都经历了部署,他们决定将这个名称放在ISO规范上。除非你是一个非常深入的模板元编程瘾君子,否则C ++ 11规范的细节与人们使用的内容可能对你没有任何影响......这意味着它甚至比所有实际目的都要早于2011年。

查看完整回答
反对 回复 2019-08-30
  • 3 回答
  • 0 关注
  • 544 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信