关于Inside the C++ Object Model一书中的一个问题

leasun 2003-02-18 05:46:45
在书中第67页上说,因为test class没有copy constructor,所以编译器不能执行NRV优化。不过我看在NRV优化中不需要copy constructor。谁能告诉我为什么?
...全文
90 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨曦2003 2003-02-22
  • 打赏
  • 举报
回复
楼上的,你多少分了?
love_snoopy 2003-02-22
  • 打赏
  • 举报
回复
NRV的作用就是减少,甚至消除对copy constructor的调用,以换取效率。

哎,什么时候涨星星呢?!?!?!
chinajiji 2003-02-22
  • 打赏
  • 举报
回复
如果你没有显式地写一个copy constructor,并且编译器为你自动生成的copy constructor 是 trivial的,那么,实际上编译器就不会为你真正生成一个copy
constructor,结果编译器可能在准备用NRV优化你的代码时,由于没有一个可以利用的copy constructor而不打开NRV优化.
但,如果你显式地写了一个copy constructor,那么,编译器在进行NRV优化时就可以找到一个copy constructor了,所以,这时就可以执行NRV优化了.
有的编译器则不需要这样做,即没有显式地定义一个copy constructor 也可以实施NRV优化.总之,这与编译器的实现有关.
J2eeLearner 2003-02-22
  • 打赏
  • 举报
回复
不需要copy constructor?

//书已经看了很久了! 书上说得很清楚 ,NRV优化需要你显式的提供拷贝构造函数(尽管他的功能和编译器默认的拷贝构造函数类似!)。
书上还把编译器生成的拷贝构造函数也分为两类! 你注意一下他们之间的区别!


建议 你直接看最后一章,其余的可以不怎么看!
leasun 2003-02-22
  • 打赏
  • 举报
回复
up
ckacka 2003-02-18
  • 打赏
  • 举报
回复
怎么提交了两次?ft~~~
ckacka 2003-02-18
  • 打赏
  • 举报
回复
对象模型上的东西都是C++编译器的规范,不过不一定你的编译器有这样的功能,至少vc没有!

毕竟作者是cfront的作者!
ckacka 2003-02-18
  • 打赏
  • 举报
回复
对象模型上的东西都是C++编译器的规范,不过不一定你的编译器有这样的功能,至少vc没有!

毕竟作者是cfront的作者!
chinajiji 2003-02-18
  • 打赏
  • 举报
回复
有的编译器需要显式地定义一个copy constructor 来激活NRV优化.有的编译器则不需要这样做,即没有显式地定义一个copy constructor 也可以实施NRV优化.总之,这与编译器的实现有关.

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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