【发布时间】:2012-05-04 20:29:41
【问题描述】:
可能重复:
Can a local variable's memory be accessed outside its scope?
考虑以下简单的 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
【问题讨论】:
-
感谢您的回答。我只是想知道我是否错过了 C++ 标准中的一些非常特殊的话题。显然,情况并非如此。这个小程序给出了正确的答案纯属偶然
标签: c++ pointers gcc reference dereference