我在C ++中找到了这个表达式(C ++ 11最激动人心的特性之一):
int i = ([](int j) { return 5 + j; })(6);
为什么我得到11?请解释一下这个表达。
答案 0 :(得分:12)
[](int j) { return 5 + j; }
是一个lambda,它以int
为参数并将其称为j
。它为此参数添加了5并返回它。表达式后面的(6)
立即调用lambda,因此你将6和5加在一起。
它大致相当于这段代码:
int fn(int j) {
return 5 + j;
}
int i = fn(6);
当然,除了它不创建命名函数。智能编译器可能会内联lambda并进行常量折叠,从而简化为int i = 11;
。