8
括弧の中にイニシャライザーリストをラッピングすると、どのような影響がありますか?それは単にリストの初期化のための別の形式ですか、それとも特定のシナリオでのみ機能しますか?括弧の中にイニシャライザのリストをラップすると、どのような影響がありますか?
例えば、a
を考慮してください。
struct A {
A(float a, float b) {}
};
int main()
{
A b(1.0f, 0.0f); // Direct initalization, finds ctor for (float, float)
A c{1.0f, 0.0f}; // List initalization, finds a matching ctor
A a({1.0f, 0.0f}); // Is this list initalization... which is expanded?
}
これらの暗黙のコンストラクタは、慣れるまでに時間がかかります。ありがとう! – Raginator
@Raginator問題はありません。私はちょうど移動のセマンティクスを含めるように答えを更新しました。この場合、コピーコンストラクターの代わりに移動コンストラクターが使用されます。 – NathanOliver
技術的には正しくありますが、移動コンストラクタまたはコピーコンストラクタは呼び出されません(C++の必須のコピーエリートでさえも)。 C++ 14ではこれらのコンストラクタはまだアクセス可能でなければならず、C++でも削除することさえできます。 – Jodocus