The ({1, 2, 3})
form 调用构造函数vector<int>
直接,并作为第一个参数传递{1, 2, 3}
。你可以传递更多的参数
vector<int> vk({1, 2, 3}, myAllocator);
If vector<int>
不会有第一个参数是 an 的构造函数initializer_list
或可以通过以下方式初始化的其他类型{1, 2, 3}
(就像另一个容器类),它不起作用。在你的情况下它有效,因为vector<int>
实际上有一个构造函数,其第一个参数是initializer_list<int>
。这就像正常的函数调用一样
void f(vector<int> const& vk);
int main() { f({1, 2, 3}); }
如果省略括号,如vector<int> vk{1, 2, 3}
,确切的含义取决于类。 Avector<int>
有一个初始化列表构造函数,它是第一个参数为 type 的构造函数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 }
).