元组向量和 initializer_list

新手上路,请多包涵

我尝试用 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 许可协议

阅读 419
1 个回答

相关的 std::tuple 构造函数是 explicit 。这意味着您想要做的事情是不可能的,因为您要使用的语法是根据复制初始化定义的(禁止调用 explicit 构造函数)。相比之下, std::tuple<int, float, char> { 1, 2.2, 'X' } 使用直接初始化。 std::pair 确实有非 explicit 只有构造函数。

使用直接初始化或标准元组工厂函数之一(例如 std::make_tuple )。

原文由 Luc Danton 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题