天天看点

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,如需转载请自行联系原作者

继续阅读