author: hjjdebug
date: 2025年 05月 28日 星期三 15:57:58 CST
descrip: c++結構化綁定:
結構化綁定:
名稱辨析: 名稱叫綁定好還是叫解綁好?
解綁意思是原來是一個整體,現在被分成了若干個部分,所以叫解.
綁定強調的意思是. 被分解的某個變量,綁定到了整體的某個變量上. 做為整體的對象沒有被分解.
按照大家的認識,還是叫結構化綁定比較好.
-
目的: 結構化綁定是C++17引入的特性,用于簡化聚合類型的數據解構操作,
-
操作對象:結構化綁定允許開發者通過單個聲明(一行代碼)
將復合數據對象 (如std::tuple、數組、結構體)的成員直接解構至獨立的變量. -
實現原理: 其本質是編譯器自動生成對聚合類型成員的匿名引用或拷貝
結構化綁定主要用于訪問公開成員,要訪問私有成員需要結合其他技術手段
測試代碼:
$ cat main.cpp
#include <iostream>
#include <tuple>
#include <map>
class Point
{
public:Point(int x,int y,int z):_x(x),_y(y),_z(z){}
public:int _x,_y,_z; //如果是私有成員,需要結合其他技術手段
};//結構化綁定實例,
int main()
{//結構體解構, 用單個的變量綁定到結構的成員變量上.Point p{3, 5, 8};auto [i1, i2, i3] = p; std::cout << "i1/i2/i3: " << i1 << ' ' << i2 << ' ' << i3 << '\n';//數組解包, 用單個變量,綁定到數組的元素上.int arr[3] = {10, 20, 30};auto [a, b, c] = arr; std::cout<<"a/b/c:" << a << ' ' << b << ' ' <<c <<'\n';//元組解包, 用單個變量去綁定元組中各個元素std::tuple<int, std::string, float> data{42, "text", 1.2f};auto [num, str, val] = data; std::cout<<"num/str/val:" << num << ' ' << str << ' ' <<val <<'\n';//遍歷關聯容器std::map<std::string, int> m{{"a",1}, {"b",2}};for (const auto& [key, value] : m) { // 把map容器對象直接解構到鍵值對變量.std::cout << key << ":" << value << "|";}std::cout<<'\n';return 0;
}
執行結果:
$ ./tt
i1/i2/i3: 3 5 8
a/b/c:10 20 30
num/str/val:42 text 1.2
a:1|b:2|