注意
結構繫結 (structured binding) 位於iso/iec14882:2017 11.5 節.
結構繫結的作用是方便從其它資料結構中提取資料, 如 pair, tuple, 陣列等.
通過結構繫結, 可以替代 c++17 之前的 std::tie, 並且使用更加方便.
通用的宣告方式為
auto [v1, v2, ...., vn] =a_structure;
其中:
例 1
// 假如有乙個函式
std::pair return_pair();
// 繫結, a 和 b 都是 int 型別
auto [a, b] = return_pair();
// 接下來可以直接使用 a, b
std::cout
<< "a: "
<< a << " b: "
<< b << std::endl;
例 2
// 假如有乙個函式
std::tuplestd::string, float> return_tuple();
// 繫結, a 型別為 int&, str 型別為 std::string&, c 型別為 float&
auto& [a, str, c] = return_pair();
// 接下來可以直接使用 a, str, c
std::cout
<< "a: "
<< a << "str: "
<< str << << "c: "
<< c << std::endl;
例 3
int array;
auto [a, b, c];
...
例 4
// 繫結時, 會按結構中成員宣告順序進行繫結
struct employee ;
int main()
; for (const
auto &[id, name, role, salary] : employees)
}
假如繫結宣告如下
auto [v1, v2, ...., vn] =a_structure;
要求 a_structure 中的成員數量同繫結宣告的數量, 否則編譯器將報錯.
例 5
std::tuple tup ;
auto [a, b] = tup; // 編譯會報錯
編譯器報錯的資訊可能為
error: type 'std::tuple' decomposes into 3 elements, but
auto [a, b] = tup;
C 17 新特性梳理
目錄 if init表示式 structual bindings inline變數 std string view c 17語言引入了乙個新版本的if switch語句形式,if init condition 和switch init condition 即可以在if和switch語句中直接對宣告變...
C 17 泛型演算法繫結器和智慧型指標
將用 和注釋進行講解 泛型演算法 特點一 泛型演算法的引數接受的都是迭代器 特點二 泛型演算法還可以接受函式物件 繫結器 二元函式物件 一元函式物件 bind1st 把二元函式物件的operator的第乙個形參繫結起來 bind2nd 把二元函式物件的operator的第二個形參繫結起來 取反器no...
c (17)一 二兩章回顧
前些天基本上每天都會花一兩個小時看書,系統的學習c 內容,彌補之前不足之處。經過了一段時間之後,已經看了兩章內容了,又一些內容是之前早就會的,當然也有一部分是自己新學到的,還有一部分是c 11新規定的內容。為了避免出現學完忘光的情況,沒過一段時間我會回顧之前所學,加深印象。今天早上的時候,回頭看了第...