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

Tob*_*bey 2 c++ tuples c++11 stdtuple

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

#include <tuple>

int main( int argc, char* argv[]) {
    const int a,b = std::tie(std::make_pair(1,2));
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

g ++给了我这个错误:

./test.cpp:在函数'int main(int,char**)'中:./ test.cpp:4:13:error:uninitialized const'a'[-fpermissive] const int a,b = std ::领带(标准:: make_pair(1,2)); ^ ./test.cpp:4:42:

error:无法将类型为'std :: pair&'的非const左值引用绑定到类型为'std :: pair'的rvalue
const int a,b = std :: tie(std :: make_pair(1,2));

使用这种模式(const或非const),我无法通过值获得任何类似元组的返回.这是一个更好的方式来做我想在这里实现的目标吗?

Vit*_*meo 8

const int a,b = std::tie(...)
Run Code Online (Sandbox Code Playgroud)

这不符合你的想法.它创建了两个const int变量:

  • a,未初始化

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


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

int a, b;
std::tie(a, b) = std::make_pair(1, 2);
Run Code Online (Sandbox Code Playgroud)

请注意,您需要a并且b已经声明和非声明const.


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

const auto [a, b] = std::make_pair(1, 2);
Run Code Online (Sandbox Code Playgroud)

  • @Tobbey - 很好.维托里奥不应该让他的努力消失,因为你有一个"哎呀"的时刻.这就是为什么SO禁止你删除. (4认同)