C++函数返回String时,编译器有时拷贝返回,有时直接原对象

qq_41582834 2021-02-24 12:32:06
如下两种情况下, 为什么当string 出现在 if 分支中的时候 函数返回对象时,不再继续返回原有对象,而是进行了拷贝呢?

代码如下:


执行结果:
...全文
229 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2021-02-24
  • 打赏
  • 举报
回复
复制消除大致的机理是这样的 T fun(){ T t1; ... return t1; } T a=fun(); //这里如果没有复制消除则 要调用一此复制构造函数。 引入了复制消除机制,就是 fun(T& a.....)//这里就是把a作为一个引用传入fun,在fun中直接用a 替代了t1;这样当fun返回时,就减少一次复制。 但是你的函数有两个返回点,则编译器无法确定用a 替代哪一个,所以复制消除失效。
colorfulcode 2021-02-24
  • 打赏
  • 举报
回复
编译器的返回值优化
forever74 2021-02-24
  • 打赏
  • 举报
回复
编译器优化这种事,对于猿来说,看起来很玄。
真相重于对错 2021-02-24
  • 打赏
  • 举报
回复
百度 复制消除。。。。。。

65,186

社区成员

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

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