所以我可以这样做:
#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
如果我创建 init
并没有什么区别与 std::initializer_list<int>
而不是auto
.
你可以乱搞它 here .
最佳答案
当你执行auto init = {1,2,3};
时,你会得到一个std::initialized_list
。这与 {1,2,3}
不同,后者是一个braced-init-list。您可以使用braced-init-list初始化数组,因为它是一个聚合,但不能使用std::initialized_list
,因为它需要构造函数。
关于c++ - 我可以从initializer_list实例化一个数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45241005/