【C++】结构化绑定

语法

auto [a,b,c] = expression;
auto [a,b,c] {expression};
  • 发生了拷贝,若是不希望有拷贝的消耗,则应使用引用。若不希望修改,应使用const引用。

简化for_Range遍历,清晰化语义

std::map<std::string, int> person;
person["zhao"]=30;
person["qian"]=20;
person["sun"]=40;

for(const auto& p : person)
{
  std::cout<<"age="<<p.first<<"name="<<p.second<<"\n";
}


std::tuple<int,float,std::string> aa_{1,2.5,"hello"};
std::cout<<std::get<0>(aa_)
         <<std::get<1>(aa_)
         <<std::get<2>(aa_)<<"\n";


struct Point
{
  float x;
  float y;
};
Point point{1.0f,2.0f};
float x = point.x;
float y = point.y;

上面的写法中,使用firstsecond访问std::map,或是使用std::get<N>()访问std::tuple,或是访问struct成员。
这种写法语义很不清晰。
而通过结构化绑定,可以使用下面这种写法:

for(const auto& [name, age] : person)
{
  std::cout<<"age="<<age<<"name="<<name<<std::endl;
}


const auto& [a,b,c] = aa_;
std::cout<<a<<b<<c<<"\n";


auto [x,y] = point;
posted @ 2026-04-23 16:57  仰望星河Leon  阅读(7)  评论(0)    收藏  举报