#include <iostream>
int foo(int i)
{
const auto a = [&i](){ i = 7; return i * i; };
a();
return i;
}
int main()
{
std::cout << foo(42) << std::endl;
return 0;
}
这编译( g++ -std=c++11 -Wall -Wextra -Wpedantic main.cpp
)并返回 49
。这让我感到惊讶,因为通过将 a
声明为一个常量对象,我本来希望 i
被引用为 const int&
。显然不是,为什么呢?
原文由 Vorac 发布,翻译遵循 CC BY-SA 4.0 许可协议
Lambda 就像非 Lambda 一样,只是它们的实现细节是隐藏的。因此,使用非 lambda 仿函数可能更容易解释:
F
有一个int &
参考成员i
。const F
不能修改其实例数据,但修改i
不是修改其实例数据。对其实例数据的修改将重新绑定i
到另一个对象(无论如何都是不允许的)。