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(...) |
这不是你想的那样。它创建了两个
a ,未初始化b ,初始化为std::tie(...) 。
正确使用
1 2 | int a, b; std::tie(a, b) = std::make_pair(1, 2); |
请注意,您需要
在C++ 17中,可以使用结构化绑定来代替:
1 | const auto [a, b] = std::make_pair(1, 2); |