c++ - XCode的这里为什么没调用拷贝构造函数呢,是不是编译器作了什么优化
PHP中文网
PHP中文网 2017-04-17 11:43:31
[C++讨论组]

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(2)
PHP中文网

这种东西叫做返回值优化

返回值优化(Return value optimization,缩写为RVO)是C++的一项编译优化技术。即删除保持函数返回值的临时对象。这可能会省略两次复制构造函数,即使复制构造函数有副作用。

然后因为你的a是一个临时变量,并且没有做什么有意义的操作,有时编译器会优化掉这一句语句(A a = fun();),当然一般情况下编译器只会在用户开启优化的时候这么做。。

怪我咯

编译器做了NRVO(named return value optimization,具名返回值优化),所谓具名返回值优化,是指你像下面这样显式给出了返回值

A a;
return a;

如果你写的是

return A();

那编译器做的就是RVO,二者大同小异。
具体做法如下:
编译器调整了函数的结构,把A a=fun();a的引用作为fun的参数,相当于有个函数void fun(A& a);然后你调用fun(a);在函数内调用a的构造函数

void fun(A& a)
{
//调用a的构造函数
}

对象的构造分两个步骤,首先分配内存空间,然后调用构造函数,这里a的内存是在fun函数外被分配,而构造函数是在fun函数内部调用。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号