0

0

C++中的structured binding是什么?如何使用?

穿越時空

穿越時空

发布时间:2025-06-05 18:48:01

|

990人浏览过

|

来源于php中文网

原创

c++++17的结构化绑定允许从复合类型中直接解包变量,提升代码可读性。其主要用法包括:1. 从std::pair和std::tuple解包,如auto [id, value, msg] = getdata(),避免使用std::get或.first/.second;2. 用于结构体,如struct point可拆解为auto [a, b] = p;3. 遍历map时拆分键值对,如for(const auto& [name, score] : scores),简化访问操作。

C++中的structured binding是什么?如何使用?

C++17 引入了一个非常实用的特性:结构化绑定(structured binding),它允许我们从数组、结构体或元组等复合类型中直接解包出多个变量,使代码更简洁易读。

简单来说,它让你可以像这样写代码:

auto [x, y] = getPoint();  // 从函数返回的 pair 或 struct 中提取 x 和 y

这种写法不仅清晰,还能减少冗余代码。下面来看看几种常见使用场景和用法。

立即学习C++免费学习笔记(深入)”;


1. 从 std::pairstd::tuple 中解包

这是结构化绑定最常被使用的场景之一。当你有一个返回 pairtuple 的函数时,可以直接把里面的值解出来:

家电小商城网站源码1.0
家电小商城网站源码1.0

家电公司网站源码是一个以米拓为核心进行开发的家电商城网站模板,程序采用metinfo5.3.9 UTF8进行编码,软件包含完整栏目与数据。安装方法:解压上传到空间,访问域名进行安装,安装好后,到后台-安全与效率-数据备份还原,恢复好数据后到设置-基本信息和外观-电脑把网站名称什么的改为自己的即可。默认后台账号:admin 密码:132456注意:如本地测试中127.0.0.1无法正常使用,请换成l

下载
#include 
#include 

std::tuple getData() {
    return {42, 3.14, "hello"};
}

int main() {
    auto [id, value, msg] = getData();
    std::cout << id << ", " << value << ", " << msg << "\n";
}

这种方式避免了使用 .first.secondstd::get 这样的访问方式,可读性更高。

  • 注意:
    • 解包顺序要与返回值一致
    • 类型最好明确,否则可能因隐式转换带来问题

2. 使用在结构体上(C++17 起)

如果你定义了一个结构体,也可以用结构化绑定把它成员变量一次性“拆”出来:

struct Point {
    int x;
    int y;
};

Point p{10, 20};
auto [a, b] = p;

这里 a 就是 p.xbp.y。绑定顺序必须与结构体中成员声明的顺序一致。

  • 小提示:
    • 如果你不想用所有字段,可以用 _ 占位符忽略某些字段(前提是编译器支持):
      auto [x, _] = p;  // 只关心 x

3. 用于遍历 map 等容器中的键值对

结构化绑定在遍历 mapunordered_map 时特别方便,能直接把 key 和 value 拆开处理:

#include 
#include 

int main() {
    std::map scores = {{"Alice", 90}, {"Bob", 85}};

    for (const auto& [name, score] : scores) {
        std::cout << name << ": " << score << "\n";
    }
}
  • 优点:
    • 避免了每次都要写 .first.second
    • 更直观地表达每个元素的含义

基本上就这些。结构化绑定不是什么复杂语法,但在实际开发中很实用,尤其是简化对组合数据类型的访问。刚开始可能不太习惯,但一旦用熟,就会觉得少了它反而麻烦。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

307

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

222

2025.10.31

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

527

2023.09.20

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

198

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

190

2025.07.04

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

60

2025.11.17

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 7.4万人学习

C 教程
C 教程

共75课时 | 4.2万人学习

C++教程
C++教程

共115课时 | 13.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号