2016-08-25 8 views
-1

、いくつかの行があります私を混同:C++自動キーワードと機能? 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後を意味しない何、それは関数または何か他のものでしょうか?それが関数なら、それを呼び出す方法は?

+6

これはλ(http://ja.cppreference.com/w/cpp/language/lambda)です。 – Holt

+1

'RND'はラムダです(' [&] ... 'で始まる等号の後のビットに注意してください)、その型はコンパイラにしか知られていません。 'auto'はここで(ラムダの)型を推論するために使われます。 –

+2

私はなぜこの質問が非常に多くのdownvotesを得ているのか知りません。何年も前にC++を書いた人でも、C++ 11(またはC++ 14)を見ても、同じ靴の中に自分自身があるでしょう!それは実際に言葉がどのくらい変わったか、そしてより良いことを言います! – Nawaz

答えて

2

はい、これは関数です - 「λ」が見えなくても "ラムダ"関数です。

あなたはこのようにそれを呼び出す:

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

RNDは9つの引数を取るlambda functionです。ラムダ関数のタイプがunique unnamed non-union non-aggregate class typeであるため、autoが必須であるか、std::function<...>のようにコピー/割り当てによってラムダを受け入れるタイプを使用する必要があります。そうでない場合

、単に呼び出し、それを呼び出す:

RND(......); 
1

autoreturn(ノーリターン次いでボイド)、[&]から関数型を推測するために、すべての参照によって取り込ま変数、(u32 a, ...)符号なしINT32変数宣言、{...};本体関数のRND(...);のように呼び出すと、値を返すと変数に代入することができます。

ありがとう、私はあなたの質問に答えようとしています。それ以上に、追加してください。

+1

この場合の 'auto'は' RND'の型ではなく、 'RND'の戻り型であり、あなたの答えがそうであると思われます。 'RND'は' auto RND = [&](...){...}; ')ではなく、ラムダ(すなわち' auto RND(...){...} 'ではなく関数です。正しいでしょう。 – Kevin

+0

ありがとうございました。 –

関連する問題