Nee*_*eed 27 c++ tuples initializer-list c++11
我试着用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'}};
Run Code Online (Sandbox Code Playgroud)
但是,对于元组的向量,编译器抱怨:
错误:从初始化列表转换为'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标准定义的东西.
任何回复将不胜感激!
Luc*_*ton 13
相关的std::tuple
建设者是explicit
.这意味着你想要做的事情是不可能的,因为你想要使用的语法是根据复制初始化(禁止调用explicit
构造函数)来定义的.相反,std::tuple<int, float, char> { 1, 2.2, 'X' }
使用直接初始化.std::pair
确实只有非explicit
构造函数.
使用直接初始化或标准元组工厂函数之一(例如std::make_tuple
).