0

これらの 2 つの異なる方法を以下でどのように呼び、どのように異なるのでしょうか?

ClassName variable(arg1); 

ClassName variable = ClassName(arg1);
4

2 に答える 2

5
ClassName variable(arg1); 

これは直接初期化です。クラス型であると仮定すると、オブジェクトは引数を適切なコンストラクターに渡すことによって初期化されます。適切なコンストラクターがない場合はエラーです。

ClassName variable = ClassName(arg1);

これはコピー初期化です。概念的には、テンポラリを作成して直接初期化します。次に、一時変数をコピーまたは移動して変数を初期化します。適切な移動またはコピー コンストラクターがない場合はエラーになります。

実際には、コピーまたは移動は省略される可能性が高いため、結果は直接初期化と同じになりますが、実際には使用されていない場合でも、アクセス可能な移動またはコピー コンストラクターがまだ存在する必要があります。

于 2013-11-04T17:07:44.757 に答える