NoFear

导航

bitwise constness与logical constness【EC++笔记】

Posted on 2012-03-16 17:49  Fear_Hao  阅读(1016)  评论(0编辑  收藏  举报
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;