c++ - 元组 vector 和 initializer_list

标签 c++ c++11 tuples 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'}};

但是,对于元组的 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/

相关文章:

c++ - 如何使用 boost base64_text (c++) 将 opencv 图像转换为字符串

c++ - 返回堆栈中的值 - C++

C++在构造函数中选择类成员的模板类型

c++ - 为什么我可以在私有(private)类型上使用 auto?

Swift:使用 as/as 进行转换有什么区别?/as!关键字和 C 风格的转换?

python - 如何在Python中将多个 "listed"元组连接成一个元组?

c++ - 检查是否至少有一个 Wayland session 正在运行

c++ - 为什么 unsigned char << unsigned char 的结果不是 unsigned char

c++ - 模板类特化 - 如何将模板参数传递给构造函数?

python - 如何绘制二维直方图?