使用数组作为元组成员:有效的C++11元组声明

Using array as tuple member: Valid C++11 tuple declaration?

本文关键字:元组 有效 C++11 声明 组成员 数组      更新时间:2023-10-16

下面的代码用G++4.7.2:编译得很好

#include <tuple>
std::tuple<float,int[2]> x;

然而,使用clang++3.2时,会产生以下错误:

错误:数组初始值设定项必须是初始值设定值列表

如果从元组声明中删除float类型,则错误将消失。上面的元组声明有效吗?

$CXX-std=c++11-c file.cpp

我认为标准中没有任何内容禁止您声明。然而,一旦您尝试初始化、复制、移动或分配元组,就会遇到问题,因为对于这些操作,元组的所有成员类型都必须能够分别用作初始化器、可复制构造的、可复制分配的和可移动分配的(§20.4.2.1)。数组的情况并非如此。

您最好使用std::array而不是C样式数组:

#include <tuple>
#include <array>
std::tuple<float,std::array<int,2> > x;