C++ 学习笔记(Structured bindings)
这个特性是 C++17 引入的,个人认为主要是解决如何让函数返回多个值的问题。在这之前,我们一般用 std::pair 或者 std::tuple 来返回多个值。比如下面的例子:
std::tuple<int, int ,int > test()
{return std::make_tuple(1,2,3);
}std::pair<int, double> test2()
{return std::make_pair(12, 12.222);
}int a1, a2, a3;double b1;std::tie(a1, a2, a3) = test();qDebug() << "a1 = " << a1 << ",a2 = " << a2 <<", a3 = " << a3;std::tie(a1, b1) = test2();qDebug() << "a1 = " << a1 << ",b1 = " << b1;
在上面的例子中,我们先定义了一些变量,然后用 std::tie 把他们绑定成一个 std::tuple,这样就可以获取多个值了。
在C++ 17 中,把这个特性更近了一步。例如下面的例子:
auto [aa1, aa2, aa3] = test();qDebug() << "aa1 = " << aa1 << ",aa2 = " << aa2 <<", aa3 = " << aa3;
另外,C++ 17 还扩充了 if 和 swtich 的语法,可以像下面这样:
if(auto [aa1, aa2, aa3] = test(); aa2 == 2){qDebug() << "aa1 = " << aa1 << ",aa2 = " << aa2 <<", aa3 = " << aa3;}switch (auto [aa1, aa2, aa3] = test(); aa2 ) {case 1:qDebug() << "1";break;case 2:qDebug() << "2";break;default:break;}