"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;
}