通常の左辺値参照を一時オブジェクトにバインドできないことがよくあります。そのため、クラス A のメソッドが、コピーを必要としない場合に const A& をパラメーターとして受け取ることがよくあります。ただし、そのような構成は完全に合法です。
double& d = 3 + 4;
一時オブジェクト 3 + 4 を参照 d にバインドするのではなく、オブジェクト 3 + 4 で参照を初期化するためです。変換または sth (つまり、別の一時オブジェクト) を使用して一時オブジェクトから取得したオブジェクトを使用して初期化されます。この場合、次のことがわかります。
int i = 2;
double & d = i;
i は double 型ではなく、それを継承していないため、これは正しくありません。ただし、それは一時オブジェクトを参照にバインドできることを意味しますが、それは本当にバインドされているのでしょうか? 一時オブジェクトをパラメーターとしてコピーコンストラクターを使用して新しいオブジェクトを作成していませんか?
したがって、私が思うに、A& の代わりに const A& param を取るメソッドを持つことのポイントは、2 番目のケースでは、そのようなメソッドがタイプ A の一時オブジェクトをパラメータとして取ることができないということではなく (そうなるため)、それにはコピーが含まれるためです。コンストラクター (パラメーターが型 A であるかのように)。私は正しいですか?