【发布时间】:2026-01-27 20:05:01
【问题描述】:
我明白了使用花括号进行统一初始化背后的想法。但是为什么在具有带初始化列表的构造函数的类型上使用此语法会调用该特定构造函数,即使参数仅包含在一对花括号中,即
int main(int argc, const char ** argv)
{
vector<int> vs0{3};
for(int v : vs0)
{
cout << v << ' ';
}
cout << '\n';
vector<int> vs1(3);
for(int v : vs1)
{
cout << v << ' ';
}
}
/*
Output
3
0 0 0
*/
为什么 vs0 是用初始化列表构造函数构造的?不应该吗
vector<int> v2{{3}};
为此?这有点令人困惑,尤其是如果您不知道一个类有一个带有初始化列表的构造函数。
【问题讨论】:
-
是的,它令人困惑,这就是为什么它被臭名昭著地称为独角兽初始化。
标签: c++ c++11 initializer-list