c++ auto关键字和函数

c++ auto keyword and function?

本文关键字:函数 关键字 auto c++      更新时间:2023-10-16

在sha256 cpp代码中,有一些行让我感到困惑:

 // Compress
auto RND = [&](u32 a, u32 b, u32 c, u32& d, u32 e, u32 f, u32 g, u32& h, u32 i)
{
    t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i];
    t1 = Sigma0(a) + Maj(a, b, c);
    d += t0;
    h  = t0 + t1;
};

auto RND之后的代码是什么意思,它是一个函数还是别的什么?如果它是一个函数,如何调用它?

RND是一个接受9个参数的lambda函数。由于lambda函数类型是unique unnamed non-union non-aggregate class type, auto是强制性的,或者您必须使用像std::function<...>这样通过复制/赋值接受lambda的类型。

否则,只需调用:

RND(......);

是的,它是一个函数-它是一个"lambda"函数(尽管没有"λ"在视线中)。

你这样称呼它:

RND(x,y,z,w,i,j,k,l,m);

autoreturn推断函数类型(无返回则void), [&]所有变量通过引用捕获,(u32 a, ...) unsigned int32变量声明,{...};函数体。然后把它命名为RND(...);你可以把它赋值给一个变量如果它返回一个值。

谢谢你,我只是学习这个试图回答你的问题,所以如果有人看到我遗漏的东西或有更多的东西,请补充。