社区
C语言
帖子详情
关于<
>中的一个问题
hyqryq
2001-04-11 12:06:00
中文版中P132:
class X{}
X f(){return X();}
void g1(X&){}
void g2(const X&){}
main()
{
g1(f()); //error
g2(f()); //OK
}
可是这个程序我在VC60下可以编译通过,书上说由于f()这个临时变量是常量,可是
在p130页的程序中 f5()=X(1)可以运行,这是怎么回事?
...全文
129
5
打赏
收藏
关于<<thinking in C++>>中的一个问题
中文版中P132: class X{} X f(){return X();} void g1(X&){} void g2(const X&){} main() { g1(f()); //error g2(f()); //OK } 可是这个程序我在VC60下可以编译通过,书上说由于f()这个临时变量是常量,可是 在p130页的程序中 f5()=X(1)可以运行,这是怎么回事?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hyqryq
2001-04-14
打赏
举报
回复
ok!
hyqryq
2001-04-14
打赏
举报
回复
KAO,为什么不能结贴呢?
lu_yb
2001-04-11
打赏
举报
回复
因为f()返回的是一个值,而不是一个变量,你要当它
做变量用,就只好产生一个临时变量。
从最终编译出的东西来说,一个函数在最后把它的返回
值压入堆栈:
push blabla
...
在调用它的地方从堆栈中弹出这个值
pop albalb
...
值是放在栈里的,而且是上一个局部空间的产物,只做
传递而用,你只能通过pop出它来得到值,然后它就不在
堆栈里了。如果你硬要直接当它做变量用,就只能得到它的
存放位置而不pop它(实际上不可能编译成这样),但这样
就会造成下一个/一组pop的错误。push和pop必须是成对
的。所以你要当它做一个变量用,只能产生一个临时变量
,把这个值放进去。而这个临时变量是个常量。
至于临时变量为什么要是常量,也是从error free的角度去
考虑的。就好象有人老想不通literal的东西为什么一定得
是常量。这些都是无数老程序员换来的经验吧。我只能
说出这么多了。
hyqryq
2001-04-11
打赏
举报
回复
谢谢lu_yb(piggy)的回答;
那么我想问"而要把它作为引用传递给其它函数时会
建立一个临时变量,这个临时变量是一个常量。",为什么要这样呢?
lu_yb
2001-04-11
打赏
举报
回复
在g1(f())中,f()返回的并不是常量,而要把它作为引用传递给其它函数时会
建立一个临时变量,这个临时变量是一个常量。此时f()是作为右值
的。写得更清楚一点,如同
X& a=f(); //error
const X& a=f(); //right
而在f5()=X(1)中,f5()做的是左值,并没有什么临时变量产生。
VC并不是一个很规范的c++编译器。并且,完全符合c++ standard
的编译器可能还没有。就好象SUN的CC也不支持name scaping。
Thin
king
in C 录音版 part3
Bruce Eckel是著名的计算机科学作家,其Thin
king
In系列是深受读者...<br>总长为40分钟的Thin
king
in C课程,讲述了从C到
C++
思想的转变,为读者更好地阅读经典Thin
king
in
C++
打下良好的基础<br>这是压缩包的第3部分
Thin
king
In
C++
Volume 2
Thin
king
In
C++
Volume 2: Practical Programming<br><br>无需多说了吧<br>
thin
king
in
c++
2
c++
编程思想<br>think in
c++
Thin
king
in C 录音版 part1
Bruce Eckel是著名的计算机科学作家,其Thin
king
In系列是深受读者欢迎的经典著作,其
中
...<br>总长为40分钟的Thin
king
in C课程,讲述了从C到
C++
思想的转变,为读者更好地阅读经典Thin
king
in
C++
打下良好的基础
C语言
70,024
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章