一、为什么不要重载 && 和 || 操作符
1 | int a1 = 1; |
- 如上,第一个 if 判断条件因为 a1 为真,所以整个逻辑或就是真,不再执行
a2++
- 第二个 if 判断条件因为 a2 为假,导致整个逻辑与为假,不再执行
a1++
如果重载 || 或 && 会是什么情况呢?
- 首先理论上,操作符重载是靠函数重载来完成。操作数作为函数参数传递。C++ 的函数参数都会被求值,因此可能会造成语义错误
1 | class Test { |
- 因此重载之后可能会造成语义错误
二、为什么不要重载逗号表达式
- 对于逗号表达式,逗号左侧会先被评估,然后逗号的右侧再被评估;最后,整个表达式的结果以逗号右侧的值为代表。
- 如果重载了逗号表达式,就无法保证左侧表达式会比右侧表达式先被评估,编译器无法作出保证
三、哪些操作符不可以重载
如下的操作符都不建议重载
1 | .、.*、 ::、 ?:、 new、 delete、 sizeof、 typeif |
重载的目的就是为了让程序更容易被阅读、被修改、被理解。如果没有好的理由重载某个操作符,就不要重载。