给定示例代码:
class Integer
{
int i_;
public:
Integer(int i) : i_(i) {}
const Integer operator+(const Integer &arg) const { return Integer(i_ + arg.i_); }
};
我开始怀疑 operator+() 是否应该实际返回一个 const Integer。Bruce Eckel 在“Thinking in C++”中为类似情况提供了运算符重载的示例,并且似乎支持返回类型上的 const 修饰符。应该使用它,为什么?
另一方面,让我们尝试使用这个类:
int main()
{
Integer a(1), b(2);
Integer c = a + b;
}
当将c创建为a和b的总和时,编译器很可能会执行复制省略,并且 Integer::operator+() 将直接在c占用的位置创建其结果(请参阅“想要速度?按值传递”)。但是当 Integer::operator+() 的返回类型声明为 const 时,由于目标是非常量的,这不会强制编译器执行复制吗?