构造函数与初始化列表是不同的
来源:互联网 发布:广联达软件有哪些 编辑:程序博客网 时间:2024/04/30 11:46
今天在《C++ prime》(真是一本好书啊,刚买来看,就学到了不少东西,果然学编程是幸福的,有那么多好书可以看)中看到了初始化列表和构造函数的不同之处。
它们的不同之处在于
--初始化列表是真正的初始化 ---相当于int a = 10;
而构造函数的函数体中的初始化(应该不能叫做初始化了)只是赋值而已 ---相当于 int a; a = 10;
这些不同是可以在其他C++书中由理解得到,但是书中没有说,以至于自己也不知道是不是真的是这样。
为了验证这个,下面做一个实验
先说明一个东西,如果A是一个类,类中有拷贝构造函数,和重载了=号运算符
那么 A a1;
A a2 = a1;//初始化。调用拷贝构造函数
A a3;
a3 = a1;//赋值,调用重载的=号运算符函数
下面要做的实验与这个有关
#include<iostream>using namespace std;class A{public:A(){m_a = 10;}A(const A&){cout<<"copy"<<endl;}A& operator =(A &a){ m_a = a.m_a; cout<<"="<<endl; return *this;}int m_a;//方便起见,定义为共有的};class B{private:int m_b;A a;public:B(){ m_b = 20;}B(A &aa){ a = aa;}};class C{private:int m_c;A a;public:C(){ m_c = 20;}C(A &aa):a(aa){ }};int main(){A a;B b(a);C c(a);}
输出结果是:
=
copy
那么结果就显而易见了。
其实从const成员只能在初始化列表,而不能在构造函数体内部初始化就能得出了。
只不过这个例子更能体现而已
0 0
- 构造函数与初始化列表是不同的
- 使用构造函数直接赋值与使用初始化列表的不同
- 构造函数与初始化列表
- 构造函数的初始化顺序 与 初始化列表。
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 两种不同构造函数的区别:初始化列表和赋值构造函数
- 类的初始化列表与构造函数的区别
- hdu3987,最小割时求最少割边数
- C#快捷键
- poj 2932 Coneology 扫描线
- 【C语言】16-预处理指令2-条件编译
- 职场工作中如何保持一个清晰的头脑
- 构造函数与初始化列表是不同的
- oracle函数整理---Lpad函数和Rpad函数
- java preparestatment 可以重复使用
- bat截取字符串[转]
- linux中crontab定时器里的"2>&1"含义解释:
- Html5游戏开发攻略(像素效果篇)
- JS 网页快捷键设置
- centos 下安装 python 模块
- 瓉圩眄早上早蝇蝇嗢国一犄上