<code>//**********************//</code>
<code>类类型</code>
<code>class</code> <code>B{</code>
<code> </code><code>public</code><code>:</code>
<code> </code><code>int</code> <code>m_num;</code>
<code> </code><code>B():m_num(50){}</code>
<code>}; </code>
<code>void</code> <code>foo(</code><code>void</code><code>) {</code>
<code> </code><code>const</code> <code>B* b1 = </code><code>new</code> <code>B();</code>
<code> </code><code>B* b2 = </code><code>const_cast</code><code><B*>(b1);</code>
<code> </code><code>b2->m_num = 200;</code>
<code> </code><code>cout <<</code><code>"b1:"</code> <code><< b1->m_num << endl;</code><code>//200</code>
<code> </code><code>cout <<</code><code>"b2:"</code> <code><< b2->m_num << endl;</code><code>//200</code>
<code> </code><code>const</code> <code>B b3;</code>
<code> </code><code>B b4 = </code><code>const_cast</code><code><B&>(b3);</code>
<code> </code><code>b4.m_num = 300;</code>
<code> </code><code>cout << </code><code>"b3:"</code> <code><< b3.m_num << endl;</code><code>//50</code>
<code> </code><code>cout << </code><code>"b4:"</code> <code><< b4.m_num << endl;</code><code>//300</code>
<code>}</code>
<code>//************************//</code>
<code>基本类型</code>
<code>void</code> <code>foo(){</code>
<code> </code><code>const</code> <code>int</code> <code>a = 100;</code>
<code> </code><code>int</code><code>* p1 = </code><code>const_cast</code><code><</code><code>int</code><code>*>(&a);</code>
<code> </code><code>*p1 = 200;</code>
<code> </code><code>cout << *p1 << endl;</code><code>//200</code>
<code> </code><code>cout << a << endl;</code><code>//100</code>
<code> </code><code>const</code> <code>int</code><code>* p2 = </code><code>new</code> <code>int</code><code>(100);</code>
<code> </code><code>int</code><code>* p3 = </code><code>const_cast</code><code><</code><code>int</code><code>*>(p2);</code>
<code> </code><code>*p3 = 200;</code>
<code> </code><code>cout << *p2 << endl;</code><code>//200 </code>
<code> </code><code>cout << *p3 << endl;</code><code>//200</code>
你会发现:
A:可以为基本类型或者类类型;
const A a;随便怎么修改a都不会变化
const A* p = new A();去掉p的const属性后,*p就变化了.
<code>//*****************//</code>
<code>class</code> <code>A{</code>
<code> </code><code>public</code><code>: </code>
<code> </code><code>A(){</code>
<code> </code><code>m_num=1;</code>
<code> </code><code>} </code>
<code>};</code>
<code>void</code> <code>foo (</code><code>void</code><code>){</code>
<code> </code><code>A a;</code>
<code> </code><code>const</code> <code>A &r = a;</code>
<code> </code><code>A a1 = </code><code>const_cast</code><code><A&>(a);</code>
<code> </code><code>a1.m_num = 200;</code>
<code> </code><code>cout << a1.m_num << endl;</code><code>//200</code>
<code> </code><code>cout << a.m_num << endl;</code><code>//1</code>
<code>//****************//</code>
const_cast<type-id>(expression)中,type-id只能为指针或引用,其他的都错,这个表达式即可以去除
expression中的const属性或volatil属性,还能增加const属性或者volatil属性
const int i = 10;
int i1 = const_cast<int>(i) //错误
增加const属性与volatil属性相反.
本文转自神ge 51CTO博客,原文链接:http://blog.51cto.com/12218412/1867169