c++ auto 关键字和函数?

c++ auto keyword and function?

在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后面的代码是什么意思,是函数还是别的?如果是函数,怎么调用?

是的,它是一个函数 - 它是一个 "lambda" 函数(尽管看不到“λ”)。

你这样称呼它:

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

RND是一个有 9 个参数的 lambda function。由于 lambda 函数类型是 unique unnamed non-union non-aggregate class typeauto 是强制性的,或者您必须使用 copy/assignment 接受 lambda 的类型,例如 std::function<...>.

否则,要调用它,只需调用:

RND(......);

autoreturn推断函数类型(没有return则为void),[&]所有通过引用捕获的变量,(u32 a, ...) unsigned int32变量声明,{...}; 函数体。你称它为 RND(...); 如果它 return 是一个值,你可以将它分配给一个变量...

谢谢,我只是为了回答你的问题而学到这个,所以如果有人看到我遗漏了一些东西或者还有更多东西,请补充。