社区
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)可以运行,这是怎么回事?
...全文
182
5
打赏
收藏
关于<>中的一个问题
中文版中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写文章
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系列是深受读者欢迎的经典著作,其
中
Thin
king
In
C++
/Java虽经一版再版,热度始终不减。除了Thin
king
In
C++
和Thin
king
In Java外,Bruce Eckel在大学授课时所将的Thin
king
in C 也被录制成版,供学生课下配合课件的使用。
总长为40分钟的Thin
king
in C课程,讲述了从C到
C++
思想的转变,为读者更好地阅读经典Thin
king
in
C++
打下良好的基础
这是压缩包的第3部分
Thin
king
In
C++
Volume 2
Thin
king
In
C++
Volume 2: Practical Programming无需多说了吧
thin
king
in
c++
2
c++
编程思想
think in
c++
Thin
king
in C 录音版 part1
Bruce Eckel是著名的计算机科学作家,其Thin
king
In系列是深受读者欢迎的经典著作,其
中
Thin
king
In
C++
/Java虽经一版再版,热度始终不减。除了Thin
king
In
C++
和Thin
king
In Java外,Bruce Eckel在大学授课时所将的Thin
king
in C 也被录制成版,供学生课下配合课件的使用。
总长为40分钟的Thin
king
in C课程,讲述了从C到
C++
思想的转变,为读者更好地阅读经典Thin
king
in
C++
打下良好的基础
Thin
king
in Patterns
中
文版
king in
C++
>
king in Java>作者的又一力作。译得也很好,书
中
的代码Copy下来就可以直接运行。 这本书前一半是用JAVA语言来写的,后面一半用了多种语言合写的。 写得很通俗易懂,译得还是不错的。 Thin
king
in Patterns with java.与《Thin
king
in java 4th Edition》配套。
C语言
70,036
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章