C++编程规范之30:避免重载&&,||或,(逗号)

摘要:

    明智就是知道合适适可而止:内置的&&,||和,(逗号)得到了编译器的特殊照顾。如果重载它们,它们就会变成普通函数,具有完全不同的语义(这将违反地26条:保持重载操作符的自然语义和第31条:不要编写依赖函数参数求值顺序的代码),这肯定会引入微妙的错误和缺陷。不要轻率地重载这些操作符。

    不能重载operator&&、operator||或者operator,的主要原因是,无法在三种情况下实现内置操作符的完整语义,而程序员通常都会需要这些语义。说的更具体一些,就是内置版本的特殊之处在于它是从左到右求职,而且&&和||还使用短路求值。

    内置版本的&&和||首先计算左边表达式的值,如果这个值能够决定结果,就不会计算第二个表达式的值,但是如果重载&&和||,这些函数在调用在执行执行总是对所有的参数进行求值,同时函数参数的求值顺序是不确定的。

    逗号操作符也存在同样的脆弱性。与&&和||一样,内置逗号保证其表达式是从左到右按顺序求值的。用户自定义的逗号操作符无法保证是从左到右求值。

你可能感兴趣的:(C++,重载,操作符重载,C++编程规范)