可能重复:
可以在其范围之外访问局部变量的内存吗?
考虑以下简单的 C++ 代码:
#include <iostream>
struct Test
{
Test( int i )
: ref( i ),
ptr( &i ) {}
int &ref;
int *ptr;
};
int main()
{
Test t( 5 );
std::cout << t.ref << std::endl;
std::cout << *t.ptr << std::endl;
return 0;
}
Test 类存储了一个指针和一个对位于堆栈上的局部变量 i 的引用。我会假设我在从 Test 构造函数返回后被破坏了。但显然情况并非如此。因为这是程序的输出:
5
134513968
访问指针的结果是我所期望的:每次运行都会更改的随机值。但是引用访问总是导致 5 - 只要局部变量 i 仍然存在。
谁能向我解释这种行为?我在 64 位 Linux(版本 4.6.3)上使用 g++。
问候, enuhtac