【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;
上面的写法中,使用first、second访问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;

浙公网安备 33010602011771号