博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
返回值优化
阅读量:4155 次
发布时间:2019-05-25

本文共 426 字,大约阅读时间需要 1 分钟。

对于代码:

class B{    public:    int data;    B(){        data = 0;        id = s_i++;        cout<<"construct "<
<
按照书上的说法是,先创建局部变量b,然后调用拷贝构造函数将b赋值给临时变量t,函数返回调用b的析构函数, 然后t调用拷贝构造函数赋值给main函数中的b,然后t析构,最后main中的b析构。

但是编译器会进行优化,编译器“偷偷地”在我们写的creat函数中增加一个参数 B&,然后把 b 的地址传进去(注意,这个时候 b 的内存空间已经存在了,但对象还没有被“构造”,也就是构造函数还没有被调用),然后在函数体内部,直接用 b 来代替原来的“临时对象”,在函数体内部就完成 b 的构造

还可以继续优化,

B creat() {   return B(3);}

这将直接构造main中的对象b

有空要好好研究下 

转载地址:http://iveti.baihongyu.com/

你可能感兴趣的文章
【Python】学习笔记——-7.0、面向对象编程
查看>>
【Python】学习笔记——-7.2、访问限制
查看>>
【Python】学习笔记——-7.3、继承和多态
查看>>
【Python】学习笔记——-7.5、实例属性和类属性
查看>>
git中文安装教程
查看>>
虚拟机 CentOS7/RedHat7/OracleLinux7 配置静态IP地址 Ping 物理机和互联网
查看>>
Jackson Tree Model Example
查看>>
常用js收集
查看>>
如何防止sql注入
查看>>
springmvc传值
查看>>
在Eclipse中查看Android源码
查看>>
Android使用webservice客户端实例
查看>>
[转]C语言printf
查看>>
C 语言学习 --设置文本框内容及进制转换
查看>>
C 语言 学习---ComboBox相关、简易“假”管理系统
查看>>
C 语言 学习---回调、时间定时更新程序
查看>>
第十一章 - 直接内存
查看>>
JDBC核心技术 - 上篇
查看>>
一篇搞懂Java反射机制
查看>>
Single Number II --出现一次的数(重)
查看>>