次のように作成されたIntegerクラスのbinary+をオーバーロードしようとしました。
const Integer operator+(const Integer& left,const Integer& right)
{
return Integer(left.i + right.i);
}
と
const Integer operator+(const Integer& left,const Integer& right)
{
Integer tmp(left.i + right.i);
return tmp;
}
私が学んだことは、最初のケースでは一時的なIntegerオブジェクトが作成されて返され、2番目のケースではコンストラクター呼び出しを使用した通常のオブジェクト作成、次にコピーしてからデストラクタの呼び出しが行われることです。Eceklが最初のものについて言ったことは、コンパイラーがオブジェクトを外部の戻り値の場所に直接構築することによってこれを利用するということです。これから何を推測しますか?戻り値の最適化について読みましたが、場所に直接コピーしても意味がわかりませんでした。