C++17结构化绑定
2021-11-22
2 min read
C++17结构化绑定
在开发中常常需要函数返回多个值,这在Python中十分容易,通过元组即可实现,示例代码如下:
def foo(x):
y0 = x
y1 = x**2
y2 = x**3
return (y0, y1, y2)
#end
x = 1.0
(y0, y1, y2) = foo(x)
然而在C++却是比较繁琐,在C++17之前,可以定义一个结构体来实现:
struct ResFoo {
double y0;
double y1;
double y2;
}
ResFoo foo(const double x)
{
ResFoo res;
res.y0 = x;
res.y1 = x * x;
res.y2 = x * x * x;
return res;
}
int main()
{
double x = 1.0;
ResFoo res = foo(x);
double y0 = res.y0;
double y1 = res.y1;
double y2 = res.y2;
// ...
return 0;
}
但是在C++17中,就可以使用结构化绑定并结合std::tuple,如同Python一样简洁地表达此意图:
std::tuple<double, double, double> foo(const double x)
{
return std::make_tuple<double, double, double>(x, x * x, x * x * x);
}
int main()
{
double x = 1.0;
auto [y0, y1, y2] = foo(x);
// ...
return 0;
}
与时俱进的C++标准让开发人员可以像使用动态语言一样编写C++代码,在开发中适当使用这样的“语法糖”会让我们的代码更加简洁优雅。
版权声明:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!