问题很简单,为什么这段代码无效:
#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),我无法获得任何类似元组的返回值。这是我做这件事的更好方法吗?
答案 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);
请注意,您需要a
和b
已声明且非const
。
在C ++ 17中,您可以使用结构化绑定:
const auto [a, b] = std::make_pair(1, 2);