【发布时间】:2012-09-27 17:49:22
【问题描述】:
我在 C++ 中发现了这个表达式(C++11 最令人兴奋的特性之一):
int i = ([](int j) { return 5 + j; })(6);
为什么我得到 11?请解释一下这个表达式。
【问题讨论】:
我在 C++ 中发现了这个表达式(C++11 最令人兴奋的特性之一):
int i = ([](int j) { return 5 + j; })(6);
为什么我得到 11?请解释一下这个表达式。
【问题讨论】:
[](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;
。
【讨论】:
[]
表示什么?每当我看到括号,我就会想到数组。
[]
包含要捕获到内部范围的外部范围中的变量列表。您可以通过值或引用来捕获事物。 (通过引用捕获时,使用 C++ 引用捕获事物;函数局部变量的生命周期在 C++ 中不会像在 C# 中那样扩展。)在这种特殊情况下,lambda 不会从外部范围捕获任何内容。