1

最近、インタビューでコピーコンストラクターのパラメーターについて尋ねられました。
[編集]コピーコンストラクター機能を実装するC++言語の設計者として、constオブジェクトへのconstポインターではなく定数参照パラメーターを選択するのはなぜですか。

ポインターをNULLに割り当てることができるので、コピーコンストラクターではおそらく(意味的に)意味がないため、ポインター変数が独立したオブジェクトであるという事実(効率の点ではおそらく良くない)など、いくつかのアイデアがありました。一方、参照は実際のオブジェクトの単なるエイリアスです(したがって、オブジェクトを渡すためのより良い方法です)。
他のアイデアはありますか?

4

3 に答える 3

6

Stroustrupは、クラスをプリミティブ型のようにしたかったからです。int変数を初期化する場合:

int x = 5;
int y = x; // Why would you write int y = &x; ?

定数ポインタを定数オブジェクトに渡すことは、C ++がCにもたらしたものと矛盾します。C++のクラスは単なるユーザー定義型です。プリミティブ型のように機能しない場合、それらは何ですか?

C ++でのプログラミングが参照なしで惨めになる別の例は、演算子のオーバーロードです。あなたが書かなければならないことを想像してください:

myclass myobj1, myobj2, myobj3;
&myobj3 = &myobj1 + &myobj2;
于 2009-09-19T06:50:39.363 に答える
1

構文上の便利さです。

コピーコンストラクターが呼び出される場合の最も一般的なユースケースは、パラメーターが値によって渡される場合、または何かが値によって返される場合です。

コピーコンストラクターに参照ではなくポインターであるパラメーターがある場合、コピーコンストラクターを呼び出すためにaddress-of演算子を適用する必要がありますが、これは厄介です。

于 2009-09-19T15:19:52.250 に答える
0

コピーコンストラクターでポインターを使用しない重要な理由は、一時的なものが右辺値にバインドされる方法にあると思います。ポインタの場合、ポインタを一時的なものに保存し、後で未定義の動作で使用することができます。参照を使用すると、参照の保存と使用が難しくなり、実際の値を使用しやすくなります。

于 2009-09-19T16:04:50.303 に答える