使用initializer_list初始化数组
Initializing an array with a 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>&&’
在这种情况下不是。您可以使用列表初始化器初始化array
std::array<int, 2> a{1,2};
但是不能用initializer_list
初始化array
,因为array
只是一个只有默认构造函数和复制构造函数的聚合类型。
您可以将数组留空,然后将initializer_list
的内容复制到其中。
相关文章:
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在函数内部的声明中初始化数组,并在外部使用它
- 为什么用结构初始化数组需要指定结构名称
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- C++使用另一个数组和新值初始化数组
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- 在 constexpr 构造函数中初始化数组是否合法?
- 我可以初始化 const 实例,以便我可以将其用作 const 来初始化数组吗?
- 在构造函数中初始化数组
- 是否可以使用函数返回的值初始化数组
- 使用宏使用额外元素初始化数组
- 在循环中显示不同值的初始化数组
- 如何在macOS中的旧扩展clang和gcc编译器中初始化数组和向量
- 使用可变模板列表初始化数组,并放置new
- 使用函数从 Visual Studio 2017 中的 main 创建和初始化数组
- 使用 c++ 中的函数初始化数组
- 这是使用构造函数初始化数组对象的最佳方法吗?
- C++ 使用变量而不是常量表达式初始化数组
- 在初始化列表中初始化数组的更好方法
- 在可变参数模板类中初始化数组