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;}