<pre name="code" class="cpp">const int i = 12;
int *j = const_cast<int*>(&i);
*j = 13;
cout << *j << endl;
cout << i << endl;
输出:13 12
const int i = 12;
0095466A mov dword ptr [i],0Ch
int *j = const_cast<int*>(&i);
00954671 lea eax,[i]
00954674 mov dword ptr [j],eax
*j = 13;
00954677 mov eax,dword ptr [j]
0095467A mov dword ptr [eax],0Dh
cout << *j << endl;
00954680 mov esi,esp
00954682 mov eax,dword ptr [__imp_std::endl (95A330h)]
00954687 push eax
00954688 mov edi,esp
0095468A mov ecx,dword ptr [j]
0095468D mov edx,dword ptr [ecx]
0095468F push edx
00954690 mov ecx,dword ptr [__imp_std::cout (95A32Ch)]
00954696 call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (95A334h)]
0095469C cmp edi,esp
0095469E call @ILT+420(__RTC_CheckEsp) (9511A9h)
009546A3 mov ecx,eax
009546A5 call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (95A31Ch)]
009546AB cmp esi,esp
009546AD call @ILT+420(__RTC_CheckEsp) (9511A9h)
cout << i << endl;
009546B2 mov esi,esp
009546B4 mov eax,dword ptr [__imp_std::endl (95A330h)]
009546B9 push eax
009546BA mov edi,esp
009546BC push 0Ch
009546BE mov ecx,dword ptr [__imp_std::cout (95A32Ch)]
009546C4 call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (95A334h)]
009546CA cmp edi,esp
009546CC call @ILT+420(__RTC_CheckEsp) (9511A9h)
009546D1 mov ecx,eax
009546D3 call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (95A31Ch)]
009546D9 cmp esi,esp
009546DB call @ILT+420(__RTC_CheckEsp) (9511A9h)
看到反汇编的代码可以看到,输出 i 的时候直接替换为了 0Ch (009546BC地址地方)