Monday, June 18, 2007

const, volatile, mutable

把成员函数声明为const, 表明它们不修改类对象. 只有被声明为const的成员函数才能被一个const类对象调用. 对于在类体外面定义的const成员函数, 我们必须在它的定义和声明中同时指定关键字const.

不好的风格: 把一个成员函数声明为const可以保证这个成员函数不修改类的数据成员,但是如果该类含有指针, 那么const 成员函数中就能修改指针所指的对象,编译器不会把这种修改检测为错误.

const成员函数可以被相同参数表的非const成员函数重载, 在这种情况下,类对象的常量性决定了调用哪一个函数. 构造函数和析构函数是两个例外. 一个const类对象"从构造完成时刻到析构开始时刻" 这段时间被认为是const.

也可以将函数成员声明为volatile, 如果一个类对象的值可能被修改的方式是编译器无法控制的,则把它声明为volatile. 与const类对象类似, 对于一个volatile类对象, 只有volatile成员函数,构造和析构函数可以被调用.

mutable数据成员:

mutable数据成员永远不会是const成员,即使它是一个const类对象的数据成员. mutable成员总可以被更新,即使是在一个const成员函数中. 为了把一个成员声明为mutable数据成员,我们必须把关键字mutable放在类成员表中的数据成员声明之前.

No comments: