我尝试用 gcc4.7 编译以下代码片段
vector<pair<int,char> > vp = {{1,'a'},{2,'b'}};
//For pair vector, it works like a charm.
vector<tuple<int,double,char> > vt = {{1,0.1,'a'},{2,4.2,'b'}};
但是,对于元组的向量,编译器会抱怨:
错误:从初始化列表转换为 ‘std::tuple’ 将使用显式构造函数 ‘constexpr std::tuple< >::tuple(_UElements&& …) [with _UElements = {int, double, char}; =无效; _Elements = {int, double, char}]’
编译器溢出的错误信息对我来说完全是胡言乱语,我不知道元组的构造函数是如何实现的,但我知道它们完全可以进行统一初始化(如: tuple<int,float,char>{1,2.2,'X'}
),因此,我想知道我遇到的问题只是编译器的 TODO 还是 C++11 标准定义的问题。
原文由 Need4Steed 发布,翻译遵循 CC BY-SA 4.0 许可协议
相关的
std::tuple
构造函数是explicit
。这意味着您想要做的事情是不可能的,因为您要使用的语法是根据复制初始化定义的(禁止调用explicit
构造函数)。相比之下,std::tuple<int, float, char> { 1, 2.2, 'X' }
使用直接初始化。std::pair
确实有非explicit
只有构造函数。使用直接初始化或标准元组工厂函数之一(例如
std::make_tuple
)。