返回信息流大意就是说这样一个场景:
int a = 1;
int &b = a;
cout << hex << &a << "\n" << &b << endl;
两行输出的东西相同,所以没有分配空间。
不知版上的各位大神怎么看呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #73361同步于 2013/8/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[讨论]看到网上有些说C++中的引用变量系统不会为其分配空间
zx723
2013/8/25镜像同步17 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
别人写的编译器会怎么做……不清楚啊,试试就知道了
【 在 zx723 的大作中提到: 】
: 大意就是说这样一个场景:
: [code=c]
: int a = 1;
: ...................
【 在 iFadeToBlack 的大作中提到: 】
: 别人写的编译器会怎么做……不清楚啊,试试就知道了
:
您的意思是说,可能会分配空间,也可能会不分?
你要啥debug build呢,应该会;release呢,很可能不会
要想知道会不会,编译完反汇编一看就知道了
【 在 zx723 的大作中提到: 】
: 您的意思是说,可能会分配空间,也可能会不分?
声明引用相当于取“别名”。既然是别名,就是同一个对象,所以不分配空间。
c++语言本身的设定,跟编译器、编译模式没关系。
这是我的理解。
iPhone客户端1.3发布
这样的理解有点本末倒置了。
语法可以“定义”引用,所以人们知道该怎么用。
但是“实现”是编译器完成的。
编译器既可以选择分配,也可以选择不分配,它要考虑的因素比较多。
PS:google一下,vs的编译器中引用是用指针实现的,所以从楼主的角度来说是不分配空间的。
【 在 shuicaibxx 的大作中提到: 】
: 声明引用相当于取“别名”。既然是别名,就是同一个对象,所以不分配空间。
: c++语言本身的设定,跟编译器、编译模式没关系。
: 这是我的理解。
: ...................
sizeof(b),在32位机器上的结果是4. 引用作为变量,肯定是占用空间的,只不过直接用取地址符,是取不到这个空间的地址的。昨天在stackoverflow上看到这方面的解释,更加系统一些。lz可以去看看。
【 在 quan 的大作中提到: 】
: sizeof(b),在32位机器上的结果是4. 引用作为变量,肯定是占用空间的,只不过直接用取地址符,是取不到这个空间的地址的。昨天在stackoverflow上看到这方面的解释,更加系统一些。lz可以去看看。
好的,谢谢。
另外,
sizeof(b),在32位机器上的结果是4.
您说这个是为了证明什么东西呢?
【 在 iam19891211 的大作中提到: 】
: 这样的理解有点本末倒置了。
: 语法可以“定义”引用,所以人们知道该怎么用。
: 但是“实现”是编译器完成的。
: ...................
多谢,但是个人觉得,如果不清楚自己程序中用到的东西在内存中是什么样的,也不是很好。。。
【 在 shuicaibxx 的大作中提到: 】
: 声明引用相当于取“别名”。既然是别名,就是同一个对象,所以不分配空间。
: c++语言本身的设定,跟编译器、编译模式没关系。
: 这是我的理解。
: ...................
多谢分享你的理解