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;}是一个匿名 lambda 函数,返回 unsigned long long。LL 后缀表示字面值是 along long而不是 a int

于 2011-12-18T16:44:47.687 回答
1

->unsigned long long声明 lambda 函数的返回类型。

您可以在 C++ lambda 上搜索更多信息,但基本语法类似于:

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

1LL基本相同static_cast<long long>(1)1是一个int1LL是一个long long

但是,更短的编写方法是:

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

应该自动推断类型的位置。请注意,我使用 ULL 而不是 LL 来使其成为 unsigned long long,就像在原始代码中一样。

于 2011-12-18T16:44:09.990 回答