Translator
 
 
Translator
 
 

参考链接:

https://blog.csdn.net/XIONGXING_xx/article/details/115553291
https://blog.csdn.net/W_Y2010/article/details/120242653
https://blog.csdn.net/baidu_41388533/article/details/109489401

C++编译过程中类的构造过程:

1.对象将在参数列表,就是括号内的代码执行前,给成员变量分配内存;

2.程序流程进入括号内,使用常规的赋值方式将值存储到内存中;

3.进入构造体函数中进行赋值和计算;

这个过程就会引发一些问题:

1)成员变量是一个const对象,那么在分配内存后就不能进行赋值;

2)成员变量是一个引用过对象,构造后也不能被赋值,因此必须在创建时就进行初始化;

3)成员变量是一个类,这个类没有无参构造函数,在初始化时,没有办法进行构造;

4)子类在初始化父类的私有成员时;

实际就是部分成员在初始化和复制操作分开后,会出现问题;

c++提供了一个针对此类问题的解决方法,成员初始化列表。

成员初始化列表:

对于构造函数而言,C++提供了两种变量初始化的方式,在构造器的函数内,在初始化列表中;

class Test
{
private:
string m_str;
const int m_age;
public:
Test(const string &s, int i):m_str(s),m_age(i);

注意事项:

1.编译器会根据类声明的参数顺序去进行执行,和初始化列表里的顺序无关;

2.初始化列表里的代码执行,是在构造函数体之前进行执行的;

高效性:

直接在构造函数内进行初始化时,会把参数进行拷贝构造,生成临时对象,把临时对象赋值给成员变量,再析构它;

而使用成员初始化列表则直接进行成员变量的构造,少了临时对象生成的步骤;

最新文章

  1. jquery点击元素之外触发事件
  2. memory_limit session.cache_expire ecshop初始化注释说明
  3. 设置TextView控件的背景透明度和字体透明度
  4. Lamp下安装memcached
  5. TFS 服务器更换后工作区无法绑定
  6. C++ Built-In Array 的语义
  7. Java学习之内部类
  8. gcc 简单编译流程
  9. IPSec协议
  10. 痞子衡嵌入式:语音处理工具Jays-PySPEECH诞生记 - 索引
  11. Python-字典与json的转换
  12. 使用Java面向对象单词必备
  13. Java HashMap工作原理及实现[转]
  14. mysql数据库基于linux的安装步骤及数据库操作
  15. 15.1-uC/OS-III资源管理(锁调度器)
  16. weex 开发踩坑日记--环境配置、安卓运行、adb、开发
  17. conda虚拟环境
  18. mybatis通用mapper源码解析(一)
  19. 时间标准基础知识UTC和ISO8601
  20. Eric6启动时“无法定位序数4540于动态链接库LIBEAY32.dll”的错误

热门文章

  1. python之loggin模块与第三方模块
  2. dpkg-DEB包管理器
  3. Matplotlib的小入门
  4. 碎碎念软件研发02:敏捷之Scrum
  5. Python列表推导式,字典推导式,元组推导式
  6. UVA471 Magic Numbers 题解
  7. 离线环境使用NuGet
  8. ubuntu下连microsoft sql server解决方案
  9. JS:函数的几种写法1
  10. 搭建ceph分布式文件系统