3
我有我正在玩的以下代码。我有一个局部变量p
,我必须打印出其地址拉姆达:本地变量的内存地址根据lambda参数的变化而变化
int main()
{
int p = 0;
auto lambda = [&p] {
std::cout << &p << std::endl;
};
lambda(); // 0x7fff78e6b7e0
}
变量的地址是相同的,无论多少次,我运行的代码。但我发现,当我改变拉姆达定义是:
auto lambda = [&p]() {
// ^^
含义,当我添加一个空的参数列表,我得到一个新的地址:
lambda(); // 0x7fff2291a260
你可以测试一下over here。为什么会发生?我在Windows上使用g ++ - 4.8和clang ++运行我的代码。
我的大哗++ - 3.2.1给出了不同的* *地址时,我多次运行代码。 – dyp
为什么你打扰一个局部变量的地址? – Geoffroy
我最近的本地clang ++ 3.4中继191142在多次运行时也显示不同的地址(32位)。 – dyp