C 17 之 結構繫結

2021-08-18 15:01:11 字數 1442 閱讀 5706

注意

結構繫結 (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新規定的內容。為了避免出現學完忘光的情況,沒過一段時間我會回顧之前所學,加深印象。今天早上的時候,回頭看了第...