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.初始化列表里的代码执行,是在构造函数体之前进行执行的;

高效性:

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

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

个人学习记录-Cpp基础-成员初始化列表的更多相关文章

  1. C++:用成员初始化列表对数据成员初始化

    1.在声明类时,对数据成员的初始化工作一般在构造函数中用赋值语句进行. 例如: class Complex{ private: double real; double imag; public: Co ...

  2. C++类的成员初始化列表的相关问题

    在以下四中情况下,要想让程序顺利编译,必须使用成员初始化列表(member initialization list): 1,初始化一个引用成员(reference member): 2,初始化一个常量 ...

  3. C++: 类成员初始化列表语法

      类的成员初始化列表的初始化的基本语法,类的构造函数还可以运用此语法为其变量初始化: class Class { private: int a; int b; char ch; public: Cl ...

  4. C++ 成员初始化列表

    1.什么是成员初始化列表 #include<iostream> #include<string> using namespace std; class Weapon { pri ...

  5. C++的成员初始化列表和构造函数体(以前未知)

    成员的初始化列表和构造函数在对成员指定初值方面是不一样的.成员初始化列表是对成员初始化,而构造函数,是对成员赋值 成员初始化列表使用初始化的方式来为数据成员指定初值, 而构造函数的函数体是通过赋值的方 ...

  6. C++中成员初始化列表的使用

    C++在类的构造函数中,可以两种方式初始化成员数据(data member). 1,在构造函数的实现中,初始类的成员数据.诸如: class point{private: int x,y;public ...

  7. (转) C++中成员初始化列表的使用

    C++在类的构造函数中,可以两种方式初始化成员数据(data member). 1,在构造函数的实现中,初始类的成员数据.诸如: class point{private: int x,y;public ...

  8. c++类 用冒号初始化对象(成员初始化列表)

    c++类 用冒号初始化对象(成员初始化列表) 成员初始化的顺序不同于它们在构造函数初始化列表中的顺序,而与它们在类定义中的顺序相同 #include<iostream> ; using n ...

  9. C++ 使用成员初始化列表的一个小坑

    注意在成员列表中初始化的顺序并不是列表顺序 而是: 在类中声明的顺序! EventLoop::EventLoop() :looping(false), quit(false),_tid(curThre ...

随机推荐

  1. 20212115朱时鸿-关于python技能树以及markdown编辑器的测评

    csdn的链接:https://blog.csdn.net/m0_68116569/article/details/124049366 计算机连接:https://gitee.com/zhu-shih ...

  2. 省HVV初体验(edu)

    浙江省HVV初体验 此次参加的HVV是edu分会场,总的来说是对HVV有了一个初步的认识,了解实战和靶场练习之间存在的巨大鸿沟. 经历了这次HVV,对于渗透测试有了更深一步的理解.渗透测试的本质就是信 ...

  3. 文字轮播与图片轮播?CSS 不在话下

    今天,分享一个实际业务中能够用得上的动画技巧. 巧用逐帧动画,配合补间动画实现一个无限循环的轮播效果,像是这样: 看到上述示意图,有同学不禁会发问,这不是个非常简单的位移动画么? 我们来简单分析分析, ...

  4. centos6搭建mysql

    目前CentOS6.5及一下版本基本上被官方给放弃更新了,但是考虑到忠实粉丝迟迟不肯放手,所以还留了入口但是非常有限 1.搭建mysql 可参照:https://blog.csdn.net/huang ...

  5. 【NOIP2017 提高组正式赛】列队 题解

    题目大意 有一个 \(n\times m\) 的方阵,每次有 \((x,y)\) 离开,离开后有两个命令 向左看齐.这时第一列保持不动,所有学生向左填补空缺.这条指令之后,空位在第 \(x\) 行第 ...

  6. 使用cmd命令行执行MySQL数据库

    说明 用命令提示符来操作一些简单的数据库,便捷又快速,随便记录一下,以后没事就自己来看看! 哈哈哈! 打开/关闭mysql服务 net start mysql net stop mysql 连接mys ...

  7. UiPath参数介绍和使用

    一.参数介绍 用于将数据从一个项目传递到另一个项目.在全局意义上,它们类似于变量,因为它们动态地存储数据并传递给它.变量在活动之间传递数据,而参数在自动化之间传递数据.因此,它们使你能够一次又一次地重 ...

  8. 【黑马pink老师的H5/CSS课程】(一)基本介绍

    视频P4~P6 黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动 1.网页 1.1 什么是网页 网站是网页的集合,网页是构成网站的基本元素,常用html格式文件 1. ...

  9. springboot项目上传存储图片到七牛云服务器

    springboot项目上传存储图片到七牛云服务器 问题描述: 当图片存在本地时会出现卡顿的现象.比如一篇图文混排的文章,如果图片没有加载完,可能整个文章都显示不出来,因为它们都是用的同一个服务器. ...

  10. Servlet-2获取请求,响应结果

    获取请求参数值1)HttpServletRequest ①      该接口是ServletRequest接口的子接口,封装了HTTP请求的相关信息,由Servlet容器创建其实现类对象并传入serv ...