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

时间:2017-07-21 15:06:56

标签: c++ 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

如果我使用init而非std::initializer_list<int>创建auto,则无效。

你可以搞砸它here

1 个答案:

答案 0 :(得分:3)

当您执行auto init = {1,2,3};时,您会获得std::initialized_list。这与{em> braced-init-list 的{1,2,3}不同。您可以使用 braced-init-list 初始化数组,因为它是聚合但您不能使用std::initialized_list,因为它需要构造函数。