函数返回一个类时的问题

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知道啊?
...全文
171 17 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
偶不知道,没看过.~~
  • 打赏
  • 举报
回复
一直觉得《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

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧