这是计算任意数字的阶乘的代码:
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
?答案 0 :(得分:2)
[]()->unsigned long long{return 1LL;}
是一个匿名的lambda函数,返回unsigned long long。 LL后缀表示文字值为long long
而不是int
。
答案 1 :(得分:1)
->unsigned long long
声明lambda函数的返回类型。
您可以在C ++ lambda上谷歌获取更多信息,但基本语法类似于:
[capture_mode] (formal_parameters) mutable -> return_type {body}
1LL
与static_cast<long long>(1)
基本相同。 1
是int
,1LL
是long long
。
但是,编写它的更简单的方法是:
Concurrency::combinable([]{return 1ULL;});
应自动推断出哪些类型。请注意,我使用ULL而不是LL来使其成为无符号long long,就像在原始代码中一样。