给出的示例代码:二元运算符+重载的返回值是否应为常量,是否会影响优化?
class Integer
{
int i_;
public:
Integer(int i) : i_(i) {}
const Integer operator+(const Integer &arg) const { return Integer(i_ + arg.i_); }
};
我开始怀疑运营商+()是否真的应该返回一个常量整数或没有。 “Thinking in C++”中的Bruce Eckel提供了运算符重载类似的例子,并且似乎赞成const返回类型的const修饰符。应该使用它,为什么?
在另一方面,让我们尝试使用这个类:
int main()
{
Integer a(1), b(2);
Integer c = a + b;
}
当创建Ç作为一个和 b编译器将最有可能进行复制省略和整数之和: :运算符+()将直接在由 c(请参阅“Want speed? Pass by value”)占用的地点创建其结果。但是,当Integer :: operator +()的返回类型被声明为const时,是否会强制编译器执行复制,因为目标是非const?
在C++ 11中,您肯定希望通过非const返回,因为它是一个右值,因此您可能需要特别标记此[tag:C++ 03]。 –
'const Integer'可以绑定到'const Integer&',所以你仍然有资格使用copy elision。然而,你不能再使用移动建筑。 –
看起来像这样的重复(或至少我的答案张贴在那里,*答案*以及这个问题):[函数与返回值(C++)](http://stackoverflow.com/questions/7376554/functions-with -return-values-c) – Nawaz