构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如:
#include
<iostream>
using
namespace
std;
struct
test1
{
test1():
a(
5),
b(
10)
{
//a = 5;
//b = 10;
cout<<
"a="<<
this->
a<<endl;
cout<<
"b="<<
this->
b<<endl;
}
int a;
int b;
};
int
main()
{
test1 test;
return
0;
}
C++初始化类成员时,是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。
Example:
class test1
{
test1(int x, int y);
int m_x;
int m_y;
} ;
test1::test1( int x, int y) : m_y(y), m_x(m_y)
{
}
test1(int x, int y);
int m_x;
int m_y;
} ;
test1::test1( int x, int y) : m_y(y), m_x(m_y)
{
}
你可能以为上面的代码将会首先做m_y=I,然后做m_x=m_y,最后它们有相同的值。但是编译器先初始化m_x,然后是m_y,,因为它们是按这样的顺序声明的。结果是m_x将有一个不可预测的值。有两种方法避免它,一个是总是按照你希望它们被初始化的顺序声明成员,第二个是,如果你决定使用初始化列表,总是按照它们声明的顺序罗列这些成员。这将有助于消除混淆。