const_cast用于对"const"或"volatile"进行转换。
代码1
int main() { const int i = 0; int *j; j = const_cast<int*>(&i); cout << &i << " "<< j << endl; cout << i << " " << *j << endl;
*j = 1; cout << &i << " "<< j << endl; cout << i << " " << *j << endl; return 0; }结果1
0xbf9dec84 0xbf9dec84 0 0 0xbf9dec84 0xbf9dec84 0 1
本来想通过const_cast得到的指针,修改i的内容,但结果并没有成功。i的值还是0,跟同学讨论,估计是编译对const值进行了优化,直接在程序中替换了。
代码2
int main() { const int i = 0; const int &ii = const_cast<int &>(i); int *j; j = const_cast<int*>(&ii); cout << &ii << " "<< j << endl; cout << ii << " " << *j << endl;
*j = 1;
cout << &ii << " "<< j << endl; cout << ii << " " << *j << endl; cout << i << endl; return 0; }结果2
0xbf5d9084 0xbf5d9084 0 0 0xbf5d9084 0xbf5d9084 1 1 0i的值还是没有改变。
代码3
class A { public: int val; public: A(int v) : val(v) { }; }; int main() { const A a(1); A* p = const_cast<A *>(&a); p->val = 2; cout << &a << " " << p << endl; cout << a.val << endl; cout << p->val << endl; }
结果3
0xbf5fd8a8 0xbf5fd8a8 2 2
对象a的val值被改变了,是因为类对象没有被优化么??