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 type
,auto
是强制性的,或者您必须使用 copy/assignment 接受 lambda 的类型,例如 std::function<...>
.
否则,要调用它,只需调用:
RND(......);
auto
从return
推断函数类型(没有return则为void),[&]
所有通过引用捕获的变量,(u32 a, ...)
unsigned int32变量声明,{...};
函数体。你称它为 RND(...);
如果它 return 是一个值,你可以将它分配给一个变量...
谢谢,我只是为了回答你的问题而学到这个,所以如果有人看到我遗漏了一些东西或者还有更多东西,请补充。
在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 type
,auto
是强制性的,或者您必须使用 copy/assignment 接受 lambda 的类型,例如 std::function<...>
.
否则,要调用它,只需调用:
RND(......);
auto
从return
推断函数类型(没有return则为void),[&]
所有通过引用捕获的变量,(u32 a, ...)
unsigned int32变量声明,{...};
函数体。你称它为 RND(...);
如果它 return 是一个值,你可以将它分配给一个变量...
谢谢,我只是为了回答你的问题而学到这个,所以如果有人看到我遗漏了一些东西或者还有更多东西,请补充。