「Java开发指南」在MyEclipse中的Spring开发(二)
2026/8/5 21:07:41
C++17 引入了结构化绑定(Structured Bindings),它允许我们将一个对象的多个成员或容器的多个元素解构为独立的变量。这种特性可以让代码更加简洁和易读。
std::pair和std::tuplestd::pair和std::tuple。std::map的键值对std::map时,可以直接解构键值对为两个变量。std::tuple_size和std::get的支持,可以使用结构化绑定解构其成员。std::array、std::deque、std::list等容器的解构。#include<iostream>#include<array>intmain(){std::array<int,3>arr={1,2,3};// 使用结构化绑定解构数组auto[a,b,c]=arr;std::cout<<"a: "<<a<<", b: "<<b<<", c: "<<c<<std::endl;return0;}输出:
a: 1, b: 2, c: 3std::pair#include<iostream>#include<utility>intmain(){std::pair<int,std::string>p={1,"Hello"};// 使用结构化绑定解构 pairauto[id,message]=p;std::cout<<"id: "<<id<<", message: "<<message<<std::endl;return0;}输出:
id: 1, message: Hellostd::map的键值对#include<iostream>#include<map>intmain(){std::map<std::string,int>myMap={{"Alice",25},{"Bob",30},{"Charlie",35}};// 遍历 map 并解构键值对for(constauto&[key,value]:myMap){std::cout<<"Key: "<<key<<", Value: "<<value<<std::endl;}return0;}输出:
Key: Alice, Value: 25 Key: Bob, Value: 30 Key: Charlie, Value: 35std::tuple#include<iostream>#include<tuple>intmain(){std::tuple<int,double,std::string>t={42,3.14,"C++17"};// 使用结构化绑定解构 tupleauto[num,pi,lang]=t;std::cout<<"num: "<<num<<", pi: "<<pi<<", lang: "<<lang<<std::endl;return0;}输出:
num: 42, pi: 3.14, lang: C++17std::deque#include<iostream>#include<deque>intmain(){std::deque<int>dq={10,20,30};// 解构 deque 的前两个元素auto[first,second]=std::tie(dq[0],dq[1]);std::cout<<"first: "<<first<<", second: "<<second<<std::endl;return0;}输出:
first: 10, second: 20std::list#include<iostream>#include<list>intmain(){std::list<int>lst={100,200,300};// 解构 list 的前两个元素autoit=lst.begin();auto[first,second]=std::tie(*it,*(++it));std::cout<<"first: "<<first<<", second: "<<second<<std::endl;return0;}输出:
first: 100, second: 200#include<iostream>#include<tuple>structPoint{intx;inty;// 提供 tuple-like 接口intgetX()const{returnx;}intgetY()const{returny;}};namespacestd{template<>structtuple_size<Point>:std::integral_constant<size_t,2>{};template<>structtuple_element<0,Point>{usingtype=int;};template<>structtuple_element<1,Point>{usingtype=int;};intget<0>(constPoint&p){returnp.getX();}intget<1>(constPoint&p){returnp.getY();}}intmain(){Point p={10,20};// 使用结构化绑定解构 Pointauto[x,y]=p;std::cout<<"x: "<<x<<", y: "<<y<<std::endl;return0;}输出:
x: 10, y: 20std::array或 C 风格数组)std::pair和std::tuplestd::map、std::deque、std::list等)std::tuple_size和std::get的特化)std::tuple_size和std::get的特化支持。通过这些示例,你可以在 C++17 中灵活使用结构化绑定来简化代码。