今天在《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成员只能在初始化列表,而不能在构造函数体内部初始化就能得出了。
只不过这个例子更能体现而已
初始化列表和构造函数体内部的初始化是不同的,布布扣,bubuko.com
原文:http://www.cnblogs.com/sword-earth/p/3584824.html