天天看点

const_cast<type-id>(expression)

<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>&lt;B*&gt;(b1);</code>

<code>    </code><code>b2-&gt;m_num = 200;</code>

<code>    </code><code>cout &lt;&lt;</code><code>"b1:"</code> <code>&lt;&lt; b1-&gt;m_num &lt;&lt; endl;</code><code>//200</code>

<code>    </code><code>cout &lt;&lt;</code><code>"b2:"</code> <code>&lt;&lt; b2-&gt;m_num &lt;&lt; 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>&lt;B&amp;&gt;(b3);</code>

<code>    </code><code>b4.m_num = 300;</code>

<code>    </code><code>cout &lt;&lt; </code><code>"b3:"</code> <code>&lt;&lt; b3.m_num &lt;&lt; endl;</code><code>//50</code>

<code>    </code><code>cout &lt;&lt; </code><code>"b4:"</code> <code>&lt;&lt; b4.m_num &lt;&lt; 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>&lt;</code><code>int</code><code>*&gt;(&amp;a);</code>

<code>    </code><code>*p1 = 200;</code>

<code>    </code><code>cout &lt;&lt; *p1 &lt;&lt; endl;</code><code>//200</code>

<code>    </code><code>cout &lt;&lt; a &lt;&lt; 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>&lt;</code><code>int</code><code>*&gt;(p2);</code>

<code>    </code><code>*p3 = 200;</code>

<code>    </code><code>cout &lt;&lt; *p2 &lt;&lt; endl;</code><code>//200                                                   </code>

<code>    </code><code>cout &lt;&lt; *p3 &lt;&lt; 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 &amp;r = a;</code>

<code>    </code><code>A a1 = </code><code>const_cast</code><code>&lt;A&amp;&gt;(a);</code>

<code>    </code><code>a1.m_num = 200;</code>

<code>    </code><code>cout &lt;&lt; a1.m_num &lt;&lt; endl;</code><code>//200</code>

<code>    </code><code>cout &lt;&lt; a.m_num &lt;&lt; endl;</code><code>//1</code>

<code>//****************//</code>

const_cast&lt;type-id&gt;(expression)中,type-id只能为指针或引用,其他的都错,这个表达式即可以去除

expression中的const属性或volatil属性,还能增加const属性或者volatil属性

const int i = 10;

int i1 = const_cast&lt;int&gt;(i) //错误

增加const属性与volatil属性相反.

本文转自神ge 51CTO博客,原文链接:http://blog.51cto.com/12218412/1867169