C++17新特性(1) -- 结构化绑定初始化(Structured binding declaration)

本文介绍了C++17中的结构化绑定初始化特性,它允许从tuple-like对象中简洁地声明和初始化多个不同类型的变量。通过案例分析了包括绑定类型、绑定数据成员等使用场景,使得代码更加简洁且编译时推导类型,提高了可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 Introduction

C++17语言上(语言特性,而不是标准库新特性)引入了一种结构化绑定的新特性,使用该特性可以利用auto同时声明多个不同类型的变量并即时从一个tuple-like对象得到赋值/初始化。
Structured binding不但可以使C++的代码更加简洁,而且似乎从语法上更贴近Python这种脚本语言了。另外,auto变量会在编译时推导出变量的类型,所以无需担心会有运行时效率的下降。而且,好像也并不会影响到编译效率,这一点尚未看到有实测。

2 Structured binding尝鲜

在C++17之前,如果要接收从函数返回的std::tuple对象,我们可以使用std::tie

std::set<S> mySet;

S value{
  
  42, "Test", 3.14};
std::set<S>::iterator iter;
bool inserted;

// unpacks the return val of insert into iter and inserted
std::tie(iter, inserted) = mySet.insert(value);

if (inserted)
    std::cout << "Value was inserted\n";

但是在C++17中,利用Structured binding特性,可以这样处理使得代码更精简

std::set<S> mySet;

S value{
  
  42, "Test", 3.14};
//use 'const auto' if necessary
auto [iter, inserted] = mySet.insert(value);

上述代码片段的完整代码为(传送门):

#include <iostream>
#include <set>
#i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值