无法从解压缩的元组初始化const int

时间:2017-10-25 12:00:23

标签: c++ c++11 tuples stdtuple

问题很简单,为什么这段代码无效:

#include <tuple>

int main( int argc, char* argv[]) {
    const int a,b = std::tie(std::make_pair(1,2));
    return EXIT_SUCCESS;
}

g ++给了我这个错误:

  

./ test.cpp:在函数'int main(int,char **)'中:./ test.cpp:4:13:   错误:未初始化的const'a'[-fpermissive] const int a,b =   的std ::领带(标准:: make_pair(1,2));                ^ ./test.cpp:4:42:

     

错误:无法将类型为'std :: pair&amp;'的非常量左值引用绑定到'std :: pair'类型的右值   const int a,b = std :: tie(std :: make_pair(1,2));

使用这种模式(const或非const),我无法获得任何类似元组的返回值。这是我做这件事的更好方法吗?

1 个答案:

答案 0 :(得分:8)

const int a,b = std::tie(...)

这不符合您的想法。它创建了两个const int变量:

  • a,未初始化

  • b,初始化为std::tie(...)

使用std::tie的正确方法如下:

int a, b;
std::tie(a, b) = std::make_pair(1, 2);

请注意,您需要ab已声明且非const

在C ++ 17中,您可以使用结构化绑定

const auto [a, b] = std::make_pair(1, 2);