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

标签 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 .

最佳答案

当你执行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/

相关文章:

c++ - 使用结构在二进制文件中创建多个记录

c++ - LDAP 的 ldap_search_s() 在 Windows Active Directory 上失败

c++ - 我应该如何在 mac 上用 c++ 编译源代码以确保它在遵守 ANSI/ISO 的同时在 Windows Visual Studio 编译器中正确编译

c++ - 遍历std::initializer_list

c++ - Boost单元测试链接错误--abi不匹配?

c++ - 具有返回值的信号/插槽不起作用

c++ - 何时使用大括号封闭的初始化程序?

c++ - 为什么不首选 std::initializer_list 转换?

c++ - constexpr C++容器–一种将push_back推回到initializer_list或类似方法的方法

c++ - 运算符的初始化列表和 RHS