C++中使用C风格数组进行聚合体初始化

4
在C++14中,我有以下类型:
std::tuple<int[2], int>;

我该如何正确地初始化它?这个

std::tuple<int[2], int> a {{2,2},3};

给我报了这个错误:

/usr/include/c++/5/tuple:108:25: error: 数组被用作初始化器

而这段代码则没有问题:

std::tuple<std::array<int,2>, int> a {{2,2},3};

这个功能可以工作,但我希望能够使用标准的C风格数组进行操作。


3
你为什么想要原始数组? std::array<int,2> 可以解决这个问题,并且使用起来更加容易。如果你担心速度或效率,需要注意的是 std::array 是零成本抽象,只要启用优化编译,你可以获得相同的汇编代码。 - NathanOliver
5
std::tuple 不是聚合体,int[2] 不可复制 :-/ ... - Jarod42
@NathanOliver,我同意你的观点。不过,我必须与现有的代码一起工作,而这些代码使用了它们,所以我正在尝试看是否还有其他方法。 - Mario Demontis
1个回答

7

或者 std::make_tuple<int[2]>({2,2},3); :)。而 make_* 通常是让编译器推断类型... - Jarod42
@Jarod42 这真是巧妙又奇怪。我不会使用 ;) - YSC
类型结果为std::tuple<int*,int>,所以很遗憾我们还没有到达那里。 - Mario Demontis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接