Rational a, b, c, d, result; ... result = a + b + c + d; // 可能用了3个临时对象 // 每个operator+ 调用使用1个 还是这样编写:
result = a; //不用临时对象 result += b; // 不用临时对象 result += c; //不用临时对象 result += d; //不用临时对象 前者比较轻易编写、debug和维护,并且在80%的时间里它的性能是可以被接受的(参见条款16)。后者具有更高的效率,估计这对于汇编语言程序员来说会更直观一些。通过提供两种方案,你可以让客户端开发人员用更轻易阅读的单独形式的operator来开发和debug代码,同时保留用效率更高的operator赋值形式替代单独形式的权力。而且根据operator的赋值形式实现其单独形式,这样你能确保当客户端从一种形式切换到另一种形式时,操作的语义可以保持不变。