——调用构造函数时,对象将在括号中的代码执行前被创建,因此无法在括号内初始化对象的常量成员。
Queue::Queue(int qs) { front = rear = NULL; items = 0; qsize =qs; // not acceptable! qsize是一个常量成员 }
因此C++提供了一种特殊的语法来完成上述工作——成员初始化列表
1 Queue::Queue(int qs) : qsize(qs), items(0) // initialize qsize to qs, 0 to items 2 { 3 front = rear = NULL; 4 }
初值可以是常量或构造函数的参数列表中的参数,并且初始化并不只限定用于常量
int games = 162; double talk = 2.17828;
替换为
int games(162); double talk(2.17828);
——C++11允许以更直观的方式进行初始化(非静态const成员,非静态成员):
class Classy { int mem1 = 10; // in-class initialization const int mem2 = 20; // in-class initialization ... };
如果调用了使用成员初始化列表的构造函数,在这种情况下,实际列表将覆盖这些默认初始值
原文:https://www.cnblogs.com/suui90/p/13137818.html