C++17 解构绑定
在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中的_(下划线)。
石中之火,即使无可燃烧之物,也要尽力发亮