C++编程规范之30:避免重载&&,||或,(逗号)
来源:互联网 发布:linux arm 启动代码 编辑:程序博客网 时间:2024/05/16 10:05
摘要:
明智就是知道合适适可而止:内置的&&,||和,(逗号)得到了编译器的特殊照顾。如果重载它们,它们就会变成普通函数,具有完全不同的语义(这将违反地26条:保持重载操作符的自然语义和第31条:不要编写依赖函数参数求值顺序的代码),这肯定会引入微妙的错误和缺陷。不要轻率地重载这些操作符。
不能重载operator&&、operator||或者operator,的主要原因是,无法在三种情况下实现内置操作符的完整语义,而程序员通常都会需要这些语义。说的更具体一些,就是内置版本的特殊之处在于它是从左到右求职,而且&&和||还使用短路求值。
内置版本的&&和||首先计算左边表达式的值,如果这个值能够决定结果,就不会计算第二个表达式的值,但是如果重载&&和||,这些函数在调用在执行执行总是对所有的参数进行求值,同时函数参数的求值顺序是不确定的。
逗号操作符也存在同样的脆弱性。与&&和||一样,内置逗号保证其表达式是从左到右按顺序求值的。用户自定义的逗号操作符无法保证是从左到右求值。
1 0
- C++编程规范之30:避免重载&&,||或,(逗号)
- 避免重载&&(逻辑与)、||(逻辑或)或,(逗号)操作符
- C++编程规范之29:考虑重载,以避免隐式类型转换
- JavaScript规范之逗号
- C++编程规范之16.避免使用宏
- C++编程规范之17:避免使用“魔数”
- C++编程规范之20:避免函数过长,避免嵌套过深
- C语言之程序编程规范
- C或C++中重载的一些注意之处
- 编程之规范(一)
- 编程之规范(二)
- 编程之规范(三)
- 编程之规范(四)
- C++:重载运算符避免数组越界
- C++编程规范之21:避免跨编译单元的初始化依赖
- C++编程规范之22:尽量减少定义性依赖。避免循环依赖
- C++编程规范之35:避免从并非要设计成基类的类中继承
- C++编程规范之40:要避免提供隐式转换
- C#学习2
- C++编程规范之29:考虑重载,以避免隐式类型转换
- http协议上传实现
- 折半查找的时间复杂度log2(n)的推导
- BW中DSO的分类及应用
- C++编程规范之30:避免重载&&,||或,(逗号)
- java数据结构-HashMap
- Android Animation之frame animation
- java的几种对象(PO,VO,DAO,BO,POJO)解释
- 中国天气网API
- 39 java 方法重载 (1)
- R-$和@符号的意义
- java_客户端防表单重复提交和服务器端session防表单重复提交
- 解决UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 108: