C++17结构化绑定

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++代码,在开发中适当使用这样的“语法糖”会让我们的代码更加简洁优雅。


本文作者: 王同学