代码是从微软那边手工抄写的
#include <iostream>
using namespace std;
class CCTest
{
public:
void setNumber(int n );
void printNumber() const;
private:
int number;
};
void CCTest::setNumber(int n)
{
number = n;
}
void CCTest::printNumber() const
{
cout << "before:" << number;
cout << "\nconst_cast&--:" << const_cast<CCTest *> (this)->number--;
cout << "\nAfter:" << number << endl;
}
int main()
{
CCTest x;
x.setNumber(8);
x.printNumber();
}
执行结果:
before:8
const_cast&--:8
After:7
请按任意键继续. . .
从执行结果可以看到,成员变量的值,已经被修改了。括号要加在this上,这点别忘了,否则编译过不去。
再看看微软官网的原话
在包含 const_cast的行, this 指针的数据类型是 const CCTest *。 const_cast 运算符更改 this 指针的数据类型。 CCTest *,允许该成员 number 进行修改。只转换次显示语句的其余部分的。