我有以下我正在玩的代码。我有一个局部变量p
,我有一个打印出其地址的 lambda:
int main()
{
int p = 0;
auto lambda = [&p] {
std::cout << &p << std::endl;
};
lambda(); // 0x7fff78e6b7e0
}
无论我运行多少次代码,变量的地址都是相同的。但是我发现当我将 lambda 定义更改为:
auto lambda = [&p]() {
// ^^
这意味着当我添加一个空参数列表时,我会得到一个新地址:
lambda(); // 0x7fff2291a260
你可以在这里测试一下。为什么会这样?我在 Windows 上的 g++-4.8 和 clang++ 上运行我的代码。