【发布时间】:2017-02-27 22:52:55
【问题描述】:
用嵌套的大括号初始化器列表初始化聚合类型(例如std::array)及其子对象的正确方法是什么?我不想直接调用子类型的构造函数。
这是一个反复出现的问题,我总是对下面的代码不起作用感到惊讶,因为指定了元素的类型,所以编译器可以推断出正确的构造函数。
请注意,示例类型 A 不一定是聚合(但它当然必须支持大括号初始化列表)。
#include <array>
struct A
{
int values[4];
};
int main()
{
std::array<A, 2> arr{{ 0, 1, 2, 3 }, { 4, 5, 6, 7 }};
// Works only if A is an aggregate, also looks confusing, I don't want to do this
//std::array<A, 2> arr{ 0, 1, 2, 3, 4, 5, 6, 7 };
// I don't want to do this neither
//std::array<A, 2> arr{A{ 0, 1, 2, 3 }, A{ 4, 5, 6, 7 }};
return 0;
}
但我得到的只是错误
error: too many initializers for 'std::array<A, 2ul>'
【问题讨论】:
标签: c++ initialization initializer-list initializer stdarray