0

これは任意の数の階乗を計算するコードです:

unsigned long long factorial(int n)
{
  Concurrency::combinable<unsigned long long> products=Concurrency::combinable<unsigned long long>([]()->unsigned long long{return 1LL;});
  Concurrency::parallel_for(1, n+1, [&products](int i){products.local() *= i;});
  return products.combine([](unsigned long long lProduct, unsigned long long rProduct){ return lProduct*rProduct;  });
}

私に説明してもらえますか:

    • とはどういう()->意味ですか? 私()はファンクターだと思いますが、どのクラスのですか?なぜそこにあるの->ですか?
    • は何1LLですか?
4

2 に答える 2

2

[]()->unsigned long long{return 1LL;}unsigned long long を返す無名ラムダ関数です。LL サフィックスは、リテラル値が ではlong longなく であることを示しますint

于 2011-12-18T16:44:47.687 に答える
1

->unsigned long longラムダ関数の戻り値の型を宣言します。

詳細については、C++ラムダでグーグルできますが、基本的な構文は次のようなものです。

[capture_mode] (formal_parameters) mutable -> return_type {body}

1LLと基本的に同じstatic_cast<long long>(1)です。1int1LLですlong long

ただし、それを書くためのより短い方法は次のようになります。

Concurrency::combinable([]{return 1ULL;});

型が自動的に推定される場所。元のコードのように、LL の代わりに ULL を使用して unsigned long long にしたことに注意してください。

于 2011-12-18T16:44:09.990 に答える