社区
C++ 语言
帖子详情
C++函数返回String时,编译器有时拷贝返回,有时直接原对象
qq_41582834
2021-02-24 12:32:06
如下两种情况下, 为什么当string 出现在 if 分支中的时候 函数返回对象时,不再继续返回原有对象,而是进行了拷贝呢?
代码如下:
执行结果:
...全文
229
4
打赏
收藏
C++函数返回String时,编译器有时拷贝返回,有时直接原对象
如下两种情况下, 为什么当string 出现在 if 分支中的时候 函数返回对象时,不再继续返回原有对象,而是进行了拷贝呢? 代码如下: 执行结果:
复制链接
扫一扫
分享
转发到动态
举报
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
打赏
举报
回复
百度 复制消除。。。。。。
实战
c++
中的
string
系列--
函数
返回
局部变量
string
(引用局部
string
,局部
string
的.c_str()
函数
)
当
函数
返回
字符串的
时
候,我们可以定义
返回
string
和
string
&。1写一个
返回
string
引用的
函数
std::
string
& Test
String
Reference() { std::
string
loal_str = "holy shit"; return loal_str; }这个
函数
当然是错误的,
编译器
会提示我们:
返回
局部变量或临
时
变量的地址: loal_str 即
C++
函数
返回
值为
对象
时
调用复制构造
函数
的问题
C++
函数
返回
值为
对象
时
调用复制构造
函数
的问题 知识点:
C++
中调用复制构造
函数
的三种情况: 通过一个
对象
构造另一个
对象
调用参数为
对象
的
函数
调用
返回
值为
对象
的
函数
– 上述知识点在各种书籍、博客都无不同,属于
C++
的标准 – 但是实际测试的
时
候,当调用
返回
值为
对象
的
函数
时
,并未按预想地调用复制构造
函数
。 – 在查阅了很多博客资料后,
原
因如下: 当调用
返回
值为
对象
的
函数
时
,系统消耗调...
C++
函数
返回
值优化
如果
编译器
支持
返回
值优化(RVO,Return Value Optimization)或者具名
返回
值优化(NRVO,Named Return Value Optimization),那么在
返回
。对于上面的例子,通过
返回
值优化(RVO)或具名
返回
值优化(NRVO),
编译器
可以省略掉。的资源(如动态分配的内存)可以被移动而不是复制,那么
编译器
会调用移动构造
函数
来将。如果没有应用RVO/NRVO,但
编译器
支持移动语义(
C++
11及以后版本),),在这种情况下,
编译器
可能会优化掉不必要的
拷贝
。
C++
类与
对象
:
拷贝
构造
函数
&浅
拷贝
拷贝
构造
函数
c++
函数
返回
对象
还是
对象
的引用以及复制构造
函数
的问题
由
c++
运算符重载
函数
的
返回
值引起,讨论
函数
返回
对象
和
对象
的引用的区别,以及复制构造
函数
中的浅
拷贝
和深
拷贝
问题
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章