c++ - 使用 initializer_list 初始化数组?

标签 c++ arrays c++11 initializer-list

<分区>

有可能吗?

#include <array>
#include <initializer_list>

struct A
{
    A ( std::initializer_list< int > l )
        : m_a ( l )
    {
    }

    std::array<int,2> m_a;
};

int main()
{
    A a{ 1,2 };
}

但这会导致这个错误:

t.cpp: In constructor ‘A::A(std::initializer_list<int>)’:
t.cpp:7:19: error: no matching function for call to ‘std::array<int, 2ul>::array(std::initializer_list<int>&)’
         : m_a ( l )
                   ^
t.cpp:7:19: note: candidates are:
In file included from t.cpp:1:0:
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.2/include/g++-v4/array:81:12: note: std::array<int, 2ul>::array()
     struct array
            ^
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.2/include/g++-v4/array:81:12: note:   candidate expects 0 arguments, 1 provided
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.2/include/g++-v4/array:81:12: note: constexpr std::array<int, 2ul>::array(const std::array<int, 2ul>&)
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.2/include/g++-v4/array:81:12: note:   no known conversion for argument 1 from ‘std::initializer_list<int>’ to ‘const std::array<int, 2ul>&’
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.2/include/g++-v4/array:81:12: note: constexpr std::array<int, 2ul>::array(std::array<int, 2ul>&&)
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.2/include/g++-v4/array:81:12: note:   no known conversion for argument 1 from ‘std::initializer_list<int>’ to ‘std::array<int, 2ul>&&’

最佳答案

在这种情况下不是。您可以使用 list-initializer

初始化array
std::array<int, 2> a{1,2};

但是您不能使用initializer_list 初始化array,因为array 只是一个聚合类型,只有默认构造函数和复制构造函数。

您可以将数组留空,然后将 initializer_list 的内容复制到其中。

关于c++ - 使用 initializer_list 初始化数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29143482/

相关文章:

c++ - 非类型参数模板。为什么是全局和引用?

c++ - ADL找不到隐藏的 friend 模板功能

c++ - 将不可复制的对象放入标准容器中

c++ - 在结构矩阵中初始化对象实例的正确方法是什么?

c++ - 使用 C++ GSOAP 客户端访问 Amazon S3 服务

c++ - 'localtime_s' : is not a member of 'std' in VS2015

javascript - 连续将数组添加到二维数组

c++ - 在 C++ 中添加 double 和复数

c# - List<T> 和数组索引器有什么区别?

javascript - 日期类型不符合谷歌图表要求