class ratio {
public:
ratio(int top, intbot) : //mem-init list
x(top), y(bot)
{
//ctor body. At this point
//x & y have been initialized
}
private:
int x, y;
};
在下面几种情况下必须遵守成员初始化列表:
另外,成员初始化列表是任意的,但是,它在构造函数中的初始化效率更高。下面的例子充分证明了这一点。它使用了初始化数据成员的两种形式。
class person
{
string _name;
public:
person(string name)
};
class person
{
string _name;
public:
person(string name) : _name(name) {}
};
从表面上看这两个例子差不多,但深究其实质却大不一样。第一个例子中,自变量被传值,当它在执行时,一个副本在构造函数的栈中被创建,当构造函数终止运行时,这个副本就被杀死。
对比来看第二个例子,它避免创建副本并杀死它的过程,因为使用了成员初始化列表。通常,当初始化的成员为类时,成员初始化列表比构造函数列表更有效。
一个非行内的构造函数的成员初始化列表通常出现在定义中而不是声明中。在下面的例子中,class body包含了一个声明的构造函数,这个构造函数没有成员初始化列表,成员初始化列表出现在构造函数的定义中。
class ratio {
public:
ratio(int top, intbot); // no initialization list here
};
ratio::ratio(int top, intbot) : x(top), y(bot)
{}