これらの 2 つの異なる方法を以下でどのように呼び、どのように異なるのでしょうか?
ClassName variable(arg1);
と
ClassName variable = ClassName(arg1);
これらの 2 つの異なる方法を以下でどのように呼び、どのように異なるのでしょうか?
ClassName variable(arg1);
と
ClassName variable = ClassName(arg1);
ClassName variable(arg1);
これは直接初期化です。クラス型であると仮定すると、オブジェクトは引数を適切なコンストラクターに渡すことによって初期化されます。適切なコンストラクターがない場合はエラーです。
ClassName variable = ClassName(arg1);
これはコピー初期化です。概念的には、テンポラリを作成して直接初期化します。次に、一時変数をコピーまたは移動して変数を初期化します。適切な移動またはコピー コンストラクターがない場合はエラーになります。
実際には、コピーまたは移動は省略される可能性が高いため、結果は直接初期化と同じになりますが、実際には使用されていない場合でも、アクセス可能な移動またはコピー コンストラクターがまだ存在する必要があります。