关于c ++:无法从解压缩的元组初始化const int

Cannot initialize const int from unpacked tuple

问题很简单,为什么此代码不起作用:

1
2
3
4
5
6
#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: In function ‘int main(int, char**)’: ./test.cpp:4:13:
error: uninitialized const ‘a’ [-fpermissive] const int a,b =
std::tie(std::make_pair(1,2));
^ ./test.cpp:4:42:

error: cannot bind non-const lvalue reference of type ‘std::pair&’ to an rvalue of type ‘std::pair’
const int a,b = std::tie(std::make_pair(1,2));

使用这种模式(const或non-const),我无法获得任何类似于值返回的元组。这是一个更好的方法来做我想在这里实现的事情吗?


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

这不是你想的那样。它创建了两个const int变量:

  • a,未初始化

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

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

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

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

在C++ 17中,可以使用结构化绑定来代替:

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