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<cstdio></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><</code><code>int</code> <code>*>(&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><</code><code>int</code> <code>*>(&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><</code><code>const</code> <code>int</code> <code>*>(&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><</code><code>const</code> <code>int</code> <code>*>(&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<char *>(&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,如需轉載請自行聯系原作者