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

Cannot initialize const int from unpacked tuple

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

#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 或非 const)按值获得任何类似元组的 return。这是实现我在这里想要实现的目标的更好方法吗?

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);