无法从解压缩的元组初始化 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);
请注意,您需要 a
和 b
已经声明并且非 const
。
在 C++17 中,您可以使用结构化绑定代替:
const auto [a, b] = std::make_pair(1, 2);
问题很简单,为什么这段代码不起作用:
#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);
请注意,您需要 a
和 b
已经声明并且非 const
。
在 C++17 中,您可以使用结构化绑定代替:
const auto [a, b] = std::make_pair(1, 2);