社区
C++ 语言
帖子详情
函数返回一个类时的问题
jronald
2004-06-15 04:16:56
<inside c++ object model>说
X bar(){
X xx;
return xx;
}
会转化为
void bar(X &result){
...
return;
}
还说
X xx=bar();
会被转化为
X xx;
bar(xx);
这好理解,但是没说像下面这样,会转化为什么
bar();
哪位DX知道啊?
...全文
174
17
打赏
收藏
函数返回一个类时的问题
说 X bar(){ X xx; return xx; } 会转化为 void bar(X &result){ ... return; } 还说 X xx=bar(); 会被转化为 X xx; bar(xx); 这好理解,但是没说像下面这样,会转化为什么 bar(); 哪位DX知道啊?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
一路奔跑
2004-06-20
打赏
举报
回复
偶也没发现看这本书走过什么弯路啊~~~
oldjackyone
2004-06-19
打赏
举报
回复
看那本书,只能对编译器中的C++有一个大概的了解,但并不能依赖于此书,毕竟每一个编译器的编译的具体过程不一样。
但可以去看编译原理。^_^
Zark
2004-06-19
打赏
举报
回复
有这样的优化啊,实在是孤陋寡闻,第一次看到.
不过对于
X bar(){
X xx;
return xx;
}
X xx=bar();
是肯定要调用一次拷贝构造函数的.
而
void bar(X &result){
...
return;
}
X xx;
bar(xx);
是肯定不用调用拷贝构造函数.
如果这样优化了,是不是就丢了拷贝构造函数那一环了呢?
而
doolin
2004-06-19
打赏
举报
回复
这样确实是一种优化,原因上大的类对象在作为参数或返回值时的开销很大.优化成引用后就减少了这种开销,但 bar()这各样的函数是不需要优化的,所以它不会被转化
oldjackyone
2004-06-16
打赏
举报
回复
偶不知道,没看过.~~
海阔天空的创业与创作
2004-06-16
打赏
举报
回复
一直觉得《More Effective C++》挺好的
楼主也看看
qwertasdfg123
2004-06-16
打赏
举报
回复
《inside the c++ object model》确实有点难。
fibbery
2004-06-16
打赏
举报
回复
学海无涯苦作舟啊!
BluntBlade
2004-06-16
打赏
举报
回复
我把《Inside The C++ Object Model》看了三遍了,没发觉走了什么弯路啊?
星星还是那个星星,月亮还是那个月亮……
dot99
2004-06-16
打赏
举报
回复
会转化为
X tempX; //临时对象, 最后丢掉了~
bar(tempX);
在constructor和destructor里面加入输出说明, 就可以看到这个临时变量的存在~
Tdxdy
2004-06-16
打赏
举报
回复
qwertasdfg123(Nullah) :
《inside the c++ object model》:个人感觉,不是难吧.对编译器具体作些什么,有个大概了解,对写代码很有好处;
ra3
2004-06-15
打赏
举报
回复
void bar(X &result);
X x = bar();
哈哈! 这样也行啊!
jronald
2004-06-15
打赏
举报
回复
知道编译器做什么能提高代码质量,估计Effetive C++之类的书看起来也会有点感觉
标题是有问题
merlinran
2004-06-15
打赏
举报
回复
还有,题目就错误。函数是无法返回一个类的,它只能返回一个对象。
merlinran
2004-06-15
打赏
举报
回复
看来又是一个中毒者。
看这本书时,千万不要把书中使用的技术当成语言本身。比如这里的RVO(返回值最优化),编译器可以做,也可以不做,那是它的自由(尽管不做RVO的编译器可能不太受欢迎)。一般来说,编译器干了些什么,做些什么优化,与我们写程序关系不太大的。
我建议你立即放下本书,买本《The C++ Programming Language》或者《C++ Primer》来看,在这个阶段,《Inside The C++ Object Model》可能会让你走很多弯路。
这是我曾经有过的教训。
Kusk
2004-06-15
打赏
举报
回复
会转化到“没有”?哈哈~`` ` ` `
我猜如果没有什么副作用,会被编译器优化掉;
否则将产生一个匿名对象,函数结束后则被自动删除。
jronald
2004-06-15
打赏
举报
回复
UPUP
Call 和 Return 使用
关于 Call 和 Return 使用方法的汇编源代码
完整串口通信程序Vc++源代码
完整串口通信程序Vc++源代码
C/C++指针经典资料大全
C/C++指针经典资料大全,十余部经典资料书籍,是您精通C指针的理想教程。
c++ primer第五版第6章答案
c++ primer第五版第6章答案
得到操作系统的版本
得到操作系统的版本
C++ 语言
65,184
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章