俺头发想白了,也想不通。Help me

qazxsw1982103 2004-03-06 07:44:42
#include<iostream.h>
int v=2; //
const int &test(int x) //经各位指点,现将返回值改为const int &型。据我
//所知
{ // 如果一个函数返回的是引用类型的话,那么该函数
//不会开辟
return 65; // 临时变量来保存返回值,
//而是将返
} // 回值直接返回给调用函数。也就是说
//const int&a=test(6)
void main() // 相当于const int &a=65; 我在计算机上已经证实
//了
{ // 这一点。a是不能改变的,因为它引用的是一个放在
//data区中
const int &a=test(6); //const池中的常量(我认为引用的65不是栈区上的,
//因为栈区
cout<<a; //不会为常量分配空间,常量固定分配在DATA区,其地
//址是固定的
} //的,不可更改。)但是我发现了一件怪事,将程序该
//为如下
#include<iostream.h>
int v=2;
const int &test()
{
return 65;
}
void str()
{
char str[]="d"; //改变堆栈上的垃圾值
}

int main()
{
const int &a=test();
cout<<a; //输出a为65
str();
cout<<a; //调用STR()后,a的值被改变
}

想不通,根据引用的定义,a和常量65应该共享一个内存单元,(a不独占内存,和65在常量池中共享一个内存单元),
可是为什么改变了堆栈上的值会引起a的值被改变呢??我知道肯定是我的理解在某个地方
出现问题,希望大家看看我上述的理解中那里出现了问题。
...全文
43 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧