私はこの「オブジェクトがコピーコンストラクタに値として渡される可能性がありますか」 コンパイラはこれを明確に拒否します。 これを理解するのを手伝ってもらえますか?オブジェクトをコピーコンストラクタに値として渡すことができます
class Dummy{
Dummy(Dummy dummy){ // This is not possible
}
};
次に、「値渡しが使用されると、コンストラクタが再帰呼び出しにつながる」と言われているのはなぜですか。
私はこの「オブジェクトがコピーコンストラクタに値として渡される可能性がありますか」 コンパイラはこれを明確に拒否します。 これを理解するのを手伝ってもらえますか?オブジェクトをコピーコンストラクタに値として渡すことができます
class Dummy{
Dummy(Dummy dummy){ // This is not possible
}
};
次に、「値渡しが使用されると、コンストラクタが再帰呼び出しにつながる」と言われているのはなぜですか。
この値を渡すためには、COPYオブジェクトが必要です。したがって、コピーする方法の定義で、オブジェクトのコピーを渡しています。
実際にこのトラップが存在しない場合は、コピーコンストラクタがコピーコンストラクタを呼び出してコピーを作成し、コピーコンストラクタを呼び出してコピーを作成し、コピーコンストラクタを呼び出してコピーを作成します、...
しかし、コンパイラーは、Ctorのパラメーターとして値渡しを許可していないようで、COPYingが画像に入ります。まだこれを得ることはできません。 – Zuzu
@Zuzu:そのため、パラメータを値で指定するコピーコンストラクタを使用できないため、この無限再帰のために呼び出すことはできません。 –
@Zuzu:*許された場合、* then *再帰があります。その仮説の再帰を防ぐために、それは禁止されています。 –
号
エラーが言うように、それはコピーコンストラクタの再帰呼び出しにつながります。コピーコンストラクタは、オブジェクトのコピーに使用されます。値渡しのときにオブジェクトのコピーを作成する必要があります。
そのようなコンストラクタを使用できる場合は、コピーコンストラクタに渡すオブジェクトをad infinitumにコピーするためにコピーコンストラクタを呼び出す必要があります。
パラメータがvalueで指定されている場合、コンパイラは最初にオブジェクトをコピーする必要があります(引数になるインスタンスを作成するには)。したがって、コピーコンストラクタを呼び出すには、コンパイラは事前にオブジェクトのコピーを作成する必要があります。
は通常、コピーコンストラクタは、このような方法で定義されています
Dummy(const Dummy& dummy)
{
// This is possible
}
この方法では、あなたがコンストラクタのオブジェクトの別のコピーを要求していない、あなただけの既存のコピーへの参照を与えます(そしてそのコピーも変更しないことを約束します)。
次に、「値渡しを使用すると、コンストラクタが再帰呼び出しにつながる」と言われているのはなぜですか?
オブジェクトをそのコピーコンストラクタに値で渡すために、渡された元のオブジェクトの一時コピーであるため、最初にコピーを作成する必要があります。
標準具体(12.1/10コンストラクタ)言う:
クラスXのコピーコンストラクタは、タイプX &のまたはタイプCONSTの最初のパラメータを持つコンストラクタであるX &は
したがって、値パラメータを取ることはできません。これは参照でなければなりません。
なぜか分かりますか?なぜなら、値パラメータを渡すには、コンパイラがコピーを作成しなければならないということです。コピーコンストラクタを呼び出す必要があります。
例をもってわかりますか? – Zuzu
orangeoctopusの回答の例は、理解を深めるのに役立つかもしれません。 –
すでに回答がありましたが、同じ質問が繰り返されているので、私は明確にしたかっただけです。 Dummy(Dummy dummy);
はコピーコンストラクタではありません。コピーコンストラクタは、Dummy(const Dummy&);
またはDummy(Dummy&);
のいずれかの形式にすることができます。オリジナルのものは、この規格では明らかに禁止されています。
次に、あなたが求めている:
を、なぜそれがと言われて、「値渡しを使用する場合はコピー コンストラクタは再帰呼び出し につながります。」
診断メッセージは標準ではなく、むしろコンパイラがその理由を説明するために選択したものです。
@Kos - 私は同意しません。人々は*正しい*答えを受け入れるべきであり、彼らの好みではありません。 –
良い点! :-)それは "あなたの好きな正解"を読んだはずです。 – Kos
私は正解であると判断する専門家はいません。しかし、私にとって魅力的なのは正しいと思われるものでしょう。 – Zuzu