天天看點

const_cast 用法

const_cast 用法

文法:

const_cast<type-name>(expression);

作用:

1. 将const對象的位址賦給同類型的非const指針。例如:

   const int val = 100;

   int * pv = const_cast<int *>(&val);

   但是,仍然無法通過這個非const指針pv來修改const對象val。是以,我覺得 const_cast 沒有什麼用。

2. 将非const對象的位址賦給同類型的const指針。例如:

   int val = 100;

   const int * pc = const_cast<const int *>(&val);

3. type-name 和 expression 的類型必須相同。

<code>#include&lt;cstdio&gt;</code>

<code>int</code> <code>main()</code>

<code>{</code>

<code>  </code><code>// assign address of "int object" to "int *" pointer.</code>

<code>  </code><code>{</code>

<code>    </code><code>int</code> <code>val_1 = 12;</code>

<code>    </code><code>int</code> <code>*ptr_1 = </code><code>const_cast</code><code>&lt;</code><code>int</code> <code>*&gt;(&amp;val_1);</code>

<code>    </code><code>*ptr_1 += 100;</code>

<code>    </code><code>printf</code><code>(</code><code>"val_1 = %d\n"</code><code>, val_1);</code>

<code>  </code><code>}</code>

<code>  </code><code>// assign address of "const int object" to "int *" pointer.</code>

<code>    </code><code>const</code> <code>int</code> <code>val_2 = 34;</code>

<code>    </code><code>int</code> <code>*ptr_2 = </code><code>const_cast</code><code>&lt;</code><code>int</code> <code>*&gt;(&amp;val_2);</code>

<code>    </code><code>*ptr_2 += 100;</code>

<code>    </code><code>printf</code><code>(</code><code>"val_2 = %d\n"</code><code>, val_2);</code>

<code>  </code><code>// assign address of "int object" to "const int *" pointer.</code>

<code>    </code><code>int</code> <code>val_3 = 56;</code>

<code>    </code><code>const</code> <code>int</code> <code>*ptr_3 = </code><code>const_cast</code><code>&lt;</code><code>const</code> <code>int</code> <code>*&gt;(&amp;val_3);</code>

<code>    </code><code>//*ptr_3 += 100; //error: assignment of read-only location ‘* ptr_3’</code>

<code>    </code><code>printf</code><code>(</code><code>"val_3 = %d\n"</code><code>, val_3);</code>

<code>  </code><code>// assign address of "const int object" to "const int *" pointer.</code>

<code>    </code><code>const</code> <code>int</code> <code>val_4 = 78;</code>

<code>    </code><code>const</code> <code>int</code> <code>*ptr_4 = </code><code>const_cast</code><code>&lt;</code><code>const</code> <code>int</code> <code>*&gt;(&amp;val_4);</code>

<code>    </code><code>//*ptr_4 += 100; error: assignment of read-only location ‘* ptr_4’</code>

<code>    </code><code>printf</code><code>(</code><code>"val_4 = %d\n"</code><code>, val_4);</code>

<code>  </code><code>// assign address of "const int object" to "char *" pointer.</code>

<code>    </code><code>const</code> <code>int</code> <code>val_5 = 78;</code>

<code>    </code><code>//char *ptr_5 = const_cast&lt;char *&gt;(&amp;val_5); error: invalid const_cast from type ‘const int*’ to type ‘char*’</code>

<code>    </code><code>//*ptr_5 += 100; error: assignment of read-only location ‘* ptr_5’</code>

<code>    </code><code>printf</code><code>(</code><code>"val_5 = %d\n"</code><code>, val_5);</code>

<code>}</code>

測試結果:

frank@userver:~/project/CppPrimerPlus/Chapter 15$ ./a.out 

val_1 = 112

val_2 = 34

val_3 = 56

val_4 = 78

val_5 = 78

      本文轉自FrankNie0101 51CTO部落格,原文連結:http://blog.51cto.com/frankniefaquan/1939622,如需轉載請自行聯系原作者

繼續閱讀