《深入探索C++对象模型》第二章:构造函数语意学(下)
来源:互联网 发布:宁波知豆电动汽车公司 编辑:程序博客网 时间:2024/06/06 17:45
1、程序转化语意学
(1)参数的初始化
把一个class object当做参数传给一个函数,相当于以下形式的调用:
X xx = arg;其中 xx 代表形式参数,而arg代表实参。因此,如果有以下这个函数:
void foo(X x0)下面这样的调用方式:
X xx;foo(xx);一种策略是导入临时性object:
X _temp0;_temp0.X::X(xx);foo(_temp0);//这里foo的声明要修改为void foo(X &x0)临时变量会在foo调用结束后调用自身的析构函数,另一种策略是拷贝建构的方式 把实际参数直接建构在其应该的位置上
(2)返回值的初始化
已知下面这个函数的定义:
X bar(){ X xx; return xx;}双阶段转化:
1、加上一个额外参数,类型是class object的引用,这个参数将用来防止被拷贝构建而得的返回值
2、在return之前安插一个copy constructor调用操作,以便欲传回的object的内容当做上述新增参数的初值
改写后的函数如下:
void bar(X &_result){ X xx; xx.X::X(); ..... _result.X::X(xx); return;}
现在编译器必须转换每一个bar调用操作:
X xx = bar();X xx;bar(xx);对于以上情况我们可以提出优化方案(在编译器层面),以result参数取代named return value:
void bar(X &_result){ _result.X::X(); //直接处理_result return;}
即NRV优化,少了一次拷贝构造函数的调用。
2、成员们的初始化队伍
这个只要记住尽量在初始化列表中进行初始化,初始化的顺序和声明有关,和在列表中的顺序无关。
————————————————————————————————————————————————————
第二章OVER,吃饭去...
阅读全文
0 0
- 《深入探索C++对象模型》第二章:构造函数语意学(下)
- 《深入探索C++对象模型》第二章:构造函数语意学(上)
- 深入探索C++对象模型 第二章 构造函数语意学
- 深入探索C++对象模型:第二章构造函数语意学
- 《深入探索C++对象模型》读书笔记——第二章 构造函数语意学
- 【深度探索C++对象模型】第二章 构造函数语意学(上)
- 【深度探索C++对象模型】第二章 构造函数语意学(中)
- 《深度探索C++对象模型》读书笔记第二章:构造函数语意学
- 《深度探索C++对象模型》第二章 构造函数语意学
- C++对象模型 第二章 构造函数语意学
- 深入探索C++对象模型之二 --- 构造函数语意学
- 深入探索C++对象模型笔记之三 —— 构造函数语意学 (Default Constructor的建构操作)
- 深入探索C++对象模型笔记之四 —— 构造函数语意学 (Copy Constructor的建构操作)
- 深度探索C++对象模型 之 构造函数语意学
- 深度探索C++对象模型 2构造函数语意学
- 《深度探索C++对象模型》--2 构造函数语意学
- [读书笔记] 深入探索C++对象模型-第二章《构造函数语义学》(下)
- 《深入探索C++对象模型》第六章 执行语意学
- 在 onCreate 和 onCreateView 中获取控件宽高的方法
- NOIP2017模拟赛(9) 总结
- win10环境下用dism+7-zip+ultraiso 制作winpe
- nodejs后台接收不到前台提交的用户信息
- 第5章 构建Spring Web 应用程序 --笔记1
- 《深入探索C++对象模型》第二章:构造函数语意学(下)
- jQuery插件----表单验证
- Java 8新特性终极指南
- Caused by: java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector
- ccf201612-1
- u-boot第一阶段分析(四)
- [RK3288][Android6.0] WiFi的HAL层加载问题
- typeof和instanceof的区别以及如何判断一个数组
- Java数据结构Map遍历和排序