先上代码

#include <iostream>class MyContruct
{
public:MyContruct(){std::cout << "MyContruct() is called" << std::endl;}MyContruct(const MyContruct&){std::cout << "MyContruct(const MyContruct&) is called" << std::endl;}MyContruct& operator=(const MyContruct&){std::cout << "MyContruct& operator=(const MyContruct&) is called" << std::endl;return *this;}~MyContruct(){std::cout << "~MyContruct() is called" << std::endl;}
};class Mytest
{
public:Mytest(MyContruct mc) :m_pMc(mc){std::cout << "Mytest(MyContruct mc) is called" << std::endl;/*m_pMc = mc;*/}~Mytest(){std::cout << "~Mytest() is called" << std::endl;}
private:MyContruct m_pMc;
};int main()
{MyContruct mc;std::cout << std::endl;Mytest mt(mc);std::cout << std::endl;return 0;
}

  

当用初始化列表时,输出如下:

当不用初始化列表时:

总结:当不用初始化列表进行初始化时,先调用默认构造函数构造了类成员,然后再调用赋值运算符对之前默认构造的类成员进行赋值,这实际上进行了两步操作。

当用初始化列表了,程序直接调用了拷贝构造函数,只需要一步操作。

转载于:https://www.cnblogs.com/XiaoXiaoShuai-/p/11377718.html

c++ 初始化列表和构造函数初始化区别相关推荐

  1. 1.c++中初始化列表和构造函数初始化的区别是什么?2.类的成员变量的初始化顺序是按照声明顺序吗?

    初始化列表和构造函数初始化的区别是什么? 初始化和赋值对内置类型的成员没有太大的区别,在成员初始化列表和构造函数体内进行,在性能和结果上都是一样的.只有一些需要注意的事项 初始化列表一般情况如下: D ...

  2. 问题十六:使用初始化列表的构造函数和使用函数体的构造函数有什么区别?

    先看一段代码: class sphere: public hitable{ public: sphere() {} sphere(vec3 cen, float r) : center(cen), r ...

  3. C++构造函数初始化列表与构造函数中的赋值的区别

    转载 C++构造函数初始化列表与构造函数中的赋值的区别 2016-12-10 15:16:51 xingpacer 阅读数 10391更多 分类专栏: C++相关 查看全文 http://www.ta ...

  4. C++中类成员变量在初始化列表中的初始化顺序

    引子:我们知道,C++中类成员变量的初始化顺序与其在类中的声明顺序是有关的. 先看代码: 1 class TestClass1 2 { 3 public: 4 TestClass1() { 5 cou ...

  5. C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别

    一般我们进行成员变量初始化用两种方法 第一种是通过在构造函数内赋值 class Point { public: Point(){ _x = 0; _y = 0;}; Point( int x, int ...

  6. 初始化列表和构造函数内赋值的区别

    1.  类的静态成员变量不能用参数初始化表初始化 (1) 如果声明了类而未定义对象,则类的一般数据成员是不占内存空间的,只有在定义对象时,在运行的时候才为对象的数据成员分配空间.但是静态数据成员不属于 ...

  7. 【c++】构造函数初始化列表中成员初始化的次序性

    上代码 #include <iostream> using namespace std;class A {public:A(int v): j(v + 2), i(j) {}void pr ...

  8. c/c++教程 - 2.4.2.6 初始化列表语法,初始化列表参数

    目录 4.2.6 初始化列表 相关教程 4.2.6 初始化列表 作用:C++提供了初始化列表语法,用来初始化属性 语法: 构造函数(): 属性1(值1),属性2(值2)...{ } 示例: 传统初始化 ...

  9. c语言初始化列表,Initialization(初始化)

    对象的声明可以通过称为初始化的过程提供其初始值. 对于每个声明符,如果不省略,初始化符可能是以下之一: = expression(1)= {  initializer-list }(2) 其中 ini ...

最新文章

  1. 中国人工智能学会通讯——人工智能在各医学亚专科的发展现状及趋势 1.3 人工智能在各医学亚专科的发展态势...
  2. java中注解动态传参_SpringMVC之注解、传参、返回值及拦截器
  3. 多学科可行法matlab,微小卫星多学科建模与仿真方法研究
  4. c++输入了后边不继续_医疗:连涨多日,后边还能加仓吗?直接说答案!
  5. 二 面向对象三大特性
  6. 18款 非常实用 jquery幻灯片图片切换
  7. MyBatis-Plus_查询进阶05
  8. 前端:CSS/10/伪类选择器,CSS列表属性,CSS边框属性,CSS内边距属性,CSS背景属性
  9. [FFmpeg] 绘制矩形框
  10. oracle 网络访问配置tnsnames.ora文件的路径
  11. 错误提示:java.lang.IllegalArgumentException解决方法
  12. 视觉SLAM十四讲学习笔记-第五讲-图像和实践
  13. 项目管理 之技术管理
  14. C++的重载(overload)与重写(override)
  15. [JavaScript]45 Fresh Useful JavaScript and jQuery Techniques and Tools
  16. 对栈的学习(前缀、中缀、后缀表达式)超详细!由计算器的实现哦
  17. sqlplus执行语句报错:unknown command beginning解决方案
  18. ios textfield 拼音输入 完成才录入
  19. php 内网唤醒,手机微信实现网络唤醒电脑(WOL),远程开机,WakeOnLan
  20. Android在线工具

热门文章

  1. 机器找不到 libcudnn.so.6
  2. 教你如何在@ViewChild查询之前获取ViewContainerRef
  3. 使用MyEclipse建立working set
  4. 1.2. Cisco IOS Firewall
  5. 为啥浏览器中的对象和w3c不一样??
  6. 苹果开机启动参数说明
  7. 加入gitignore文件没有起作用怎么办
  8. openstack 手动安装版 功能测试
  9. Centos6.4下zabbix的安装配置
  10. 【Vegas原创】重建Exchange 2007 OWA的虚拟目录