下一代std :: tie

时间:2017-08-31 14:41:15

标签: c++ standards c++17

当函数需要返回两个参数时,可以使用std :: pair编写它:

std::pair<int, int> f()
{return std::make_pair(1,2);}

如果你想使用它,你可以这样写:

int one, two;
std::tie(one, two) = f();

这种方法的问题在于你需要定义一个&#39;和&#39;两个&#39;然后将它们分配给f()的返回值。如果我们能写出像

这样的东西会更好
auto {one, two} = f();

我观看了一个讲座(我不记得哪一个,对不起),其中发言者说C ++标准的人试图做那样的事情。我认为这个讲座是从2年前开始的。有没有人知道你现在(几乎是c ++ 17)你能做到或类似吗?

1 个答案:

答案 0 :(得分:14)

是的,有一个名为structured bindings的东西允许以这种方式初始化多个值。

语法使用square brackets但是:

#include <utility>

std::pair<int, int> f()
{
    //return std::make_pair(1, 2); // also works, but more verbose
    return { 1, 2 };
}

int main()
{
    auto[one, two] = f();
}

demo