结构化绑定是C++17引入的语法糖,支持std::tuple、std::pair、原生数组、聚合类(如struct Point)和std::array等类型;语法为auto [a, b, c] = expr;,默认绑定为值,auto& [a, b]为引用,const auto&最常用;相比传统std::get冗长写法更简洁高效。

结构化绑定是C++17引入的语法糖,允许你从一个结构化对象(如结构体、数组、tuple等)中**一次性解包多个成员,并直接声明和初始化对应变量**,无需手动逐个访问成员或写冗长的代码。
能用在哪些类型上?
只要对象满足“可结构化绑定”的条件,就能用。常见支持类型包括:
标准容器:std::tuple、std::pair 原生数组:int arr[3] 聚合类(aggregate class):没有用户定义构造函数、私有/受保护非静态成员、基类、虚函数的struct/class 某些标准库类型(如std::array,因其实质是聚合类)
基本语法怎么写?
用auto [a, b, c]这种形式,方括号里是新变量名,左边用auto或显式类型(需匹配),右边是可绑定的表达式:
auto [x, y] = std::make_pair(1, 3.14); // x:int, y:doubleauto [a, b, c] = std::array{10, 20, 30}; // a,b,c 都是 intstruct Point { int x; double y; };Point p{42, 2.718};auto [px, py] = p; // px:int, py:double —— 直接按声明顺序绑定
注意几个关键细节
结构化绑定不是“拷贝成员”,而是创建对原对象成员的引用(默认是const引用或值,取决于左侧声明):
立即学习“C++免费学习笔记(深入)”;
写auto [a, b] → 绑定为值(可能触发拷贝) 写auto& [a, b] → 绑定为左值引用(可修改原对象成员) 写const auto& [a, b] → 绑定为const左值引用(最常用,避免不必要拷贝) 不能绑定到位域、static成员、或不可访问的私有成员(除非是友元或public)
和传统写法对比更直观
以前要这样写:
auto t = std::make_tuple("hello", 42, 3.14);std::string s = std::get(t);int i = std::get(t);double d = std::get(t);
现在一行搞定:
auto [s, i, d] = std::make_tuple("hello", 42, 3.14);
不仅简洁,变量名语义清晰,编译器还能做更好的优化。
以上就是c++++17的结构化绑定是什么 同时声明和初始化多个变量【语法糖】的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1489625.html
微信扫一扫
支付宝扫一扫