gpt4 book ai didi

c++ - 元组 vector 和 initializer_list

转载 作者:IT老高 更新时间:2023-10-28 12:58:20 26 4
gpt4 key购买 nike

我尝试用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com