({1, 2, 3})
フォームは、vector<int>
のコンストラクタを直接呼び出し、第1引数として{1, 2, 3}
を渡します。あなたはvector<int>
は、その最初のパラメータinitializer_list
または{1, 2, 3}
によって初期化することができ、別の型(のような、別のコンテナクラス)であるコンストラクタを持っていない場合、それは動作しません
vector<int> vk({1, 2, 3}, myAllocator);
を複数の引数を渡すことができました。あなたの場合は、vector<int>
に実際には最初のパラメータがinitializer_list<int>
のコンストラクタがあるために動作します。これは、括弧を省略した場合、通常の機能では、
void f(vector<int> const& vk);
int main() { f({1, 2, 3}); }
を呼び出すvector<int> vk{1, 2, 3}
のように、正確な意味は、クラスによって異なりだけのようです。 A vector<int>
には、初期化子リストコンストラクタがあります。このコンストラクタは、最初のパラメータがinitializer_list<int>
(オプションで参照)で、その他のすべてのパラメータがデフォルトの引数を持つコンストラクタです。クラスにこのようなコンストラクタがある場合、初期化子リストはそのコンストラクタに渡されます。あるいは、クラスは単純に集合体でもかまいません(struct A { int a; int b; int c; };
のように、初期化子リストはメンバーを初期化します)。3
を別々のint
引数として受け入れるコンストラクタを持つことができます。それが明示的なコンストラクタを使用することを禁じていることを除いて
最後= { 1, 2, 3 }
フォームは、括弧を省略したバージョンとほとんど同じである(つまり、単に=
の除去)は、(つまり、彼らはexplicit vector(initializer_list<int>);
としてそれを宣言していたか、彼らはそれがだろう、代わりにexplicit vector(int, int, int);
を宣言していました= { 1, 2, 3 }
を使用するとエラーになります)。
を; ' –
私には意味がありません。 'ベクトル vk {2}'では、イニシャライザリストも使用しています。 –