我可以从initializer_list实例化数组吗?



所以我可以这样做:

#include <iostream>
#include <vector>
main(){   
auto init = {1,2,3};
std::vector<int> v(init);
}

我可以这样做:

#include <iostream>
#include <vector>
main(){   
int i[3] = {1,2,3};
}

为什么我不能这样做:

#include <iostream>
#include <vector>
main(){   
auto init = {1,2,3};
int i[3] = init;
}

编译器告诉我:

main.cpp: In function 'int main()':
main.cpp:10:16: error: array must be initialized with a brace-enclosed 
initializer
int i[3] = init;
^~~~
exit status 1

如果我用std::initializer_list<int>而不是auto创建init,这没有区别。

你可以在这里搞砸它。

当你做auto init = {1,2,3};时,你会得到一个std::initialized_list。 这与仅{1,2,3}不同,后者是一个大括号的初始化列表。 您可以使用大括号初始化列表初始化数组,因为它是聚合,但不能使用std::initialized_list,因为这需要构造函数。

最新更新