如果类中有const成员变量,可以对它初始化但是不能赋值。Queue中有声明const qsize;下面的代码是无法正常运行的
Queue:Queue(int qs)
{
front = rear = NULL;
items = 0;
qsize = qs;
}
从概念上来说,调用构造函数时,对象将在括号中的代码执行之前被创建。因此,调用Queue(int qs)构造函数将导致程序首先给4个成员变量分配内存。然后,程序流程进入到括号中,使用常规的赋值方式将值存储到内存中。因此,对于const数据成员,必须在执行到构造函数体之前,即创建对象时进行初始化。所以c++提供了成员初始化列表来完成这项工作。
Queue::Queue(int qs) : qszie(qs)
{
front = rear = NULL;
items = 0;
}
Queue::Queue(int qs) : qsize(qs), front(NULL), rear(NULL), items(0)
{
}
只有构造函数可以使用这种初始化列表语法。对于const类成员、声明为引用的类成员都必须使用这种语法。因为它们都是只能在创建的时候被初始化。对于一般数据成员,使用成员列表初始化时的效率更高。
C++11的类内初始化
class Classy
{
int mem1 = 10;
const int mem2 = 20;
}