私はSTDを含むC++クラスには2つの異なるコンストラクタ::ベクトル部材を提供しようとしています:C++ブレース囲まれた初期化子リスト
class A {
public:
std::vector<int> p;
A (std::vector<int> i) { p = i; }
A (int x, int y, int z) : A ({x, y, z}) {}
};
int main() {
A a ({1, 2, 3});
A a2 (1, 2, 3);
return 0;
}
最初のコンストラクタは、[OK]を動作しますが、二番目のスロー次のエラー:
error: call of overloaded ‘A(<brace-enclosed initializer list>)’ is ambiguous
2つの方法の違いはどちらですか?
[ノート](http://coliru.stacked-crooked.com/a/72bc6715d2140911)を読むことができます。 – LogicStuff
もちろん、あいまいです。 '{x、y、z}'現在の 'A'がコピー/移動される一時的な' A'か 'A'が構築される'ベクトル 'を作成できます。コンパイラはどのように選択する必要がありますか? – StoryTeller
エラーが発生した場合は、必ず*完全*エラーメッセージをお読みください。何が起こっているのかを理解するのに役立つ情報のメモがしばしばあるかもしれません。 –