我尝试用 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'}};
但是,对于元组的 vector ,编译器会提示:
error: converting to ‘std::tuple’ from initializer list would use explicit constructor ‘constexpr std::tuple< >::tuple(_UElements&& ...) [with _UElements = {int, double, char}; = void; _Elements = {int, double, char}]’
编译器溢出的错误信息对我来说完全是胡言乱语,我不知道元组的构造函数是如何实现的,但我知道它们完全可以使用统一初始化(例如:tuple<int,float,char>{1,2.2,'X'}
),因此,不知道我遇到的问题只是编译器的TODO还是C++11标准定义的问题。
最佳答案
相关std::tuple
构造函数是 explicit
.这意味着您想要做的事情是不可能的,因为您想要使用的语法是根据复制初始化定义的(禁止调用 explicit
构造函数)。相比之下,std::tuple<int, float, char> { 1, 2.2, 'X' }
使用直接初始化。 std::pair
确实有非explicit
仅限构造函数。
使用直接初始化或标准元组工厂函数之一(例如 std::make_tuple
)。
关于c++ - 元组 vector 和 initializer_list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12436586/