BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #73361同步于 2013/8/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[讨论]看到网上有些说C++中的引用变量系统不会为其分配空间

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