<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