View Code
当成员函数为const时 constness(常量性)
bitwise constness:不更换对象内任何一个字节,编译器判断成员变量没有赋值动作即可。
不足:
class test
{
public:
char& operator[](size_t index) const
{
return mPointer[index];
}
test(const char* str)
{
mPointer = new char[strlen(str)+1];
memcpy(mPointer,str,strlen(str)+1);
}
~test()
{
delete mPointer;
}
private:
char *mPointer;
};
int main()
{
const test T1("123"); //创建常量对象
char *pc = &T1[0]; //调用const成员函数 返回指向内容的指针
pc[0]='x'; //指针指向的值可以改变,与常量对象矛盾
return 0;
}
logical constness:一个const成员函数可以修改它所处理的对象的某些bits,但要保证在用户使用中侦测不出。
可使用mutable关键字解除bitwise constness,例如 mutable char *mPointer;