const_cast
three examples to explain the usage of const_cast
[Code]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
   |  	> File Name: mod_const.cpp 	> Author: zyy 	> Mail: zyy34472@gmail.com  ************************************************************************/
  #include <stdio.h> #include <iostream> using namespace std;
  #define NAME2STR(_VAR_) (#_VAR_) #define OUT(_VAR_) cout << NAME2STR(_VAR_) << ": " << _VAR_ << endl
  int main (int argc, char** argv) {     cout << "const_cast" << endl << endl;      const volatile int a1 = 1;      int &b1 = const_cast<int&>(a1);      cout << "[const volatile int -> int&]" << endl;      OUT(((&a1) == (&b1)));      OUT(&a1);      printf("But use printf, &a = %p\n", &a1);     OUT(&b1);      b1 = 2;      OUT(a1);      OUT(b1);      cout << endl << endl; ;           const int a2 = 1;      int &b2 = const_cast<int&>(a2);      cout << "[const int -> int&]" << endl;      OUT(((&a2) == (&b2)));      OUT(&a2);      OUT(&b2);      b2 = 2;      OUT(a2);      OUT(b2);      cout << endl << endl;           int a3 = 1;      const int &b3 = a3;     int &x = const_cast<int&>(b3);      cout << "[int -> const int&]" << endl;           OUT(&a3);      OUT(&x);      x = 20;       OUT(a3);      OUT(x);      cout << endl << endl; 
  	return 0;  }
 
  | 
 
[Result]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
   | const_cast
  [const volatile int -> int&] ((&a1) == (&b1)): 1 &a1: 1 But use printf, &a = 0x7ffeeccb8354 &b1: 0x7ffeeccb8354 a1: 2 b1: 2
 
  [const int -> int&] ((&a2) == (&b2)): 1 &a2: 0x7ffeeccb8358 &b2: 0x7ffeeccb8358 a2: 1 b2: 2
 
  [int -> const int&] &a3: 0x7ffeeccb835c &x: 0x7ffeeccb835c a3: 20 x: 20
   | 
 
[Explaination]
Express grateful thanks to Hao ren