7

たとえば、次のように、そのクラスのオブジェクトを値で受け取るコンストラクターを持つクラスを作成しようとしている場合。

class X{
    X(){}
    X(X x){} //Error!
};

次に、g++は2番目のコンストラクターに対して次のように文句を言います。

error: invalid constructor; you probably meant ‘X (const X&)’

親愛なるコンパイラ、いいえ、私はconst参照を意味していませんでした。今回は、自分が書いたことをやりたかったのです。パラメーターxを値で渡すことです。なぜこれが無効なのですか?

4

3 に答える 3

18

コピーコンストラクターを作成しようとしているので、コピーコンストラクターは参照を取得する必要があります。それ以外の場合、xを値でコンストラクターに渡すと、コンパイラーはxの一時コピーを作成する必要があり、そのためにコピーコンストラクターを呼び出す必要があります。そのために一時コピーを作成する必要があります。アドインフィニウム。

したがって、コピーコンストラクターは、無限再帰を防ぐために、参照によって引数を取る必要があります。

于 2012-08-10T15:43:31.733 に答える
6

なぜなら

X(X x){} //Error!

コピーコンストラクタが必要です。つまり、それ自体、つまり再帰的です。つまり、いつ終了しますか?!

于 2012-08-10T15:42:43.170 に答える
1

コピーするオブジェクトへの参照を渡すことによってのみ機能するコピーコンストラクターを実装しようとしています。

于 2012-08-10T15:42:57.883 に答える