3
4

2 に答える 2

2

この場合の初期化セマンティクスはコピー初期化です。コピー初期化は、引数を正式に変換してからコピーします。変換された引数は左辺値ではないため、コピー コンストラクターの非 const 参照にバインドできません。コピー コンストラクターを定義しない場合は、コンパイラーによって const 参照を使用するコンストラクターが定義されます。コピー コンストラクターは、引数を変更しないため、const 参照も取得する必要があります。

コンパイラは、コピーの構築を最適化することが許可されていることに注意してください。ただし、そうでない場合でもプログラムが合法である場合に限ります。

于 2013-07-11T15:56:51.633 に答える
2

クラスにコピーコンストラクターと整数コンストラクターの両方が必要であることを考慮して、それを正常にコンパイルするにはどうすればよいですか?

constコピー コンストラクターの参照引数に追加すると、この問題が修正されます。

myclass(const myclass &a) : n(a.n) {}

ideone のデモ

于 2013-07-11T15:51:18.337 に答える