サンプルコードを考えると:
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 を返すべきかどうか疑問に思い始めました。「Thinking in C++」の Bruce Eckel は、同様のケースの演算子のオーバーロードの例を提供しており、戻り値の型で const 修飾子を好むようです。それを使用する必要がありますか?その理由は?
一方、このクラスを使用してみましょう。
int main()
{
Integer a(1), b(2);
Integer c = a + b;
}
aとbの合計としてcを作成する場合、コンパイラはほとんどの場合コピー省略を実行し、Integer::operator+() はcが占める場所にその結果を直接作成します (「速度が必要ですか? 値で渡す」を参照してください)。しかし、Integer::operator+() の戻り値の型が const として宣言されている場合、ターゲットが非 const であるため、コンパイラは強制的にコピーを実行しませんか?