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

Can i instantiate an array from an 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 没有什么区别。

你可以把它弄乱 here

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