c ++ auto关键字和功能?

时间:2016-08-25 12:56:48

标签: c++ auto

在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;
};

自动RND 后代码的含义是什么?是函数还是其他什么?如果它是一个函数,如何调用它?

3 个答案:

答案 0 :(得分:2)

是的,这是一个功能 - 它是一个“lambda”功能(尽管看不到“λ”)。

你这样称呼它:

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

答案 1 :(得分:2)

RND是一个lambda function,有9个参数。由于lambda函数类型为unique unnamed non-union non-aggregate class typeauto是必需的,或者您必须使用通过复制/赋值接受lambda的类型,如std::function<...>

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

RND(......);

答案 2 :(得分:1)

autoreturn推断函数类型(不返回然后为void),[&]通过引用捕获的所有变量,(u32 a, ...) unsigned int32变量声明,{{1函数的主体。你可以像{...};一样调用它,如果它返回一个值,你可以将它分配给一个变量......

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