首页 > 编程语言 >C++17 解构绑定

C++17 解构绑定

时间:2023-05-06 21:00:33浏览次数:32  
标签:myFunc 变量 17 int 绑定 C++ 解构

在python中,加入我们有一个函数返回了两个数值,如:

def getData(x, y):
	return x,y

那么我们在使用这个函数时只需要使用两个新变量去接收函数返回值就可以:

a,b = getData(4, 5)

但是对于C++来说就没有这么方便了,比如一个函数要返回多个数通常会把他们封装成一个pair或者vector容器或者自定义结构体返回,在接收时也需要使用同样的类型去接收,然后再做出处理。

C++17有一个新特性极大方便了简化了此类操作,这个特性就是解构绑定,即一次性的做到像python那样直接使用返回的变量。

如下代码:

struct MyStruct {
    int x;
    double y;
};

MyStruct myFunc() {
    return {42, 3.14};
}

int main() {
    MyStruct s = myFunc();
    int x = s.x;
    double y = s.y;
    // ...
}

可以使用解构绑定简化为:

auto [x, y] = myFunc();

auto会自动推导出类型。

但是有时候我们需要将解构的变量绑定到提前已经定义好的变量上怎么办呢?

我们不能像普通变量那样直接去掉auto,也不能在这句代码之前先定义好两个同名变量,这样会导致变量的同名错误。

有另一个关键字支持这样的操作:

int x=1,y=2;
std::tie(x, y) = myFunc();
std::tie(std::ignore, y) = myFunc();

如上代码所示,tie关键字即可完成绑定至已定义变量的功能,或者也可以使用ignore来忽视该位置变量,对等于python中的_(下划线)。

标签:myFunc,变量,17,int,绑定,C++,解构
From: https://www.cnblogs.com/fireinstone/p/17378451.html

相关文章

  • Codeforces 1817F - Entangled Substrings(SA)
    为什么赛时不开串串题?为什么赛时不开串串题?为什么赛时不开串串题?为什么赛时不开串串题?为什么赛时不开串串题?一种SA做法,本质上和SAM做法等价,但是说来也丢人,一般要用到SAM的题我都是拿SA过的/wul考虑将\(ac\)看作一个整体。记\(\text{occ}(S)\)为\(S\)出现位置的集......
  • C/C++手机库存管理系统[2023-05-06]
    C/C++手机库存管理系统[2023-05-06]1、 设计并实习一个手机库存管理系统。要求实现至少以下功能:产品录入产品查询产品增加产品删除产品入库产品出库排序退出其中具体功能如下:产品录入:产品初始化。录入产品编号,产品品牌,产品型号,产品数量,产品价格。例如: 1001,华为,p30,10,5......
  • C/C++猜数字游戏[2023-05-06]
    C/C++猜数字游戏[2023-05-06]题目8:猜数字游戏软件题目描述设计一个猜数字游戏软件,该程序具有以下功能:(1)游戏区:玩家在此开始游戏,系统给出玩家每次猜数字后的提示,包括数值、位置均正确的个数,以及数值正确但位置不正确的个数。(2)刷新排行榜:当玩家成功完成一轮猜数字游戏后......
  • 【C++文件信息(空格信息)的读、写、追加、截断】
    文件数据类型:ofstream:创建文件+写入信息ifstream:读取信息fstream:创建文件+写入信息+读取信息文件打开模式:ios::app(追加)、ios::out(写)、ios::in(读)ios::ate(定位末尾)、ios::trunc(截断覆盖)打开文件:open(“文件名”,打开模式)关闭文件:close()写入文件:使用流插入运算......
  • C/C++活动管理程序[2023-05-06]
    C/C++活动管理程序[2023-05-06]设计一个活动管理程序,该程序具有以下功能:(1)多用管理,用户登录:输入用户名和密码,密码正确才允许登录。(2)可以创建活动,设定活动的内容,活动的人数,时间,要求等;(3)登录的所有用户可以查看当前所有正在征集的活动,并可以选择参加;(4)活动的创建者,可......
  • c++ 保留小数示范
    #include<iostream>#include<iomanip>//必要头文件usingnamespacestd;intmain(intargc,char**argv){ doublea,b,c; doublen; cin>>a>>b>>c; n=(a/b)*c; cout<<fixed<<setprecision(6)<<n<<endl; return......
  • 掌握C++中static关键字的多种使用场景
    static是什么在最开始C中引入了static关键字可以用于修饰变量和函数,后来由于C++引入了class的概念,现在static可以修饰的对象分为以下5种:成员变量,成员函数,普通函数,局部变量,全局变量static的作用修饰成员变量static修饰成员变量之后,该变量会属于该类,而不是某一个该类的对象。......
  • 深入理解C++右值引用和移动语义:全面解析
    C++11引入了右值引用,它也是C++11最重要的新特性之一。原因在于它解决了C++的一大历史遗留问题,即消除了很多场景下的不必要的额外开销。即使你的代码中并不直接使用右值引用,也可以通过标准库,间接地从这一特性中收益。为了更好地理解该特性带来的优化,以及帮助我们实现更高效的程序,......
  • Spring17_JdbcTemplate基本使用12
    一、概述(了解)JdbcTemplate是spring框架中提供的一个对象,是对原始繁琐的JdbcAPI对象的简单封装。spring框架为我们提供了很多的操作模板类。例如:操作关系型数据的JdbcTemplate和HibernateTemplate,操作nosql数据库的 RedisTemplate,操作消息队列的JmsTemplate等等。......
  • WEB|[HITCON 2017]SSRFme
    源码110.244.80.206<?phpif(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){$http_x_headers=explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);$_SERVER['REMOTE_ADDR']=$http_x_headers[0];}#获取......