"const" 与类的一些关系

 

struct C1{
int m_i;

C1(
int i=0):m_i(i){}
~C1(){}

void fun(int i)const{
m_i
=i;
}
// 编译错误,
// 首先这个成员函数的声明相当于函数
// void C1_fun(int i,C1 const * const this){
// this->m_i=i;
// }
// 其次类的const属性会传递给它的域,
// 则 this->m_i的类型为int const,
// 可想而知这样的声明是不能通过一般的编译的
};

//----------------------------------------------------------------

struct C2{

int mutable m_i;
// 为m_i添加mutable属性能使其被const成员函数更改

C2(
int i=0):m_i(i){}
~C2(){}


void fun(int i)const{
m_i
=i;
}
// 通过编译,由于m_i被声明为mutable了,这个成员函数的声明相当于函数
// void C2_fun(int i,C2 const * const this){
// const_cast<int&>(this->m_i)=i;
// }

void fun(int i){
m_i
=i;
}
// 这个成员函数的声明相当于函数
// void C2_fun(int i,C2 * const this){
// const_cast<int&>(this->m_i)=i;
// }


};

int _tmain(int argc, _TCHAR* argv[]){
C2 c2;
// 调用非const的fun成员函数

c2.fun(
1);

C2
const const_c2;
// 调用const的fun成员函数

const_c2.fun(
2);

return 0;
}
posted @ 2010-04-12 01:57  tnt_vampire  阅读(258)  评论(0编辑  收藏  举报