注册 登录
编程论坛 C++教室

求助:关于C++自增自减问题

讷于言者 发布于 2012-11-25 17:10, 247 次点击
  
 以下程序结果为什么是这样??

{
  int a=10;
    cout<<a+ ++a<<endl;//输出22
    a=10;
    cout<<++a+ ++a<<endl;//输出24
  }
2 回复
#2
yuccn2012-11-25 17:53
  cout<<a+ ++a<<endl;//输出22
001017CF  mov         eax,dword ptr [a]  
001017D2  add         eax,1  
001017D5  mov         dword ptr [a],eax  
001017D8  mov         esi,esp  
001017DA  mov         ecx,dword ptr [__imp_std::endl (1082A8h)]  
001017E0  push        ecx  
001017E1  mov         edx,dword ptr [a]  
001017E4  add         edx,dword ptr [a]  
001017E7  mov         edi,esp  
001017E9  push        edx  
001017EA  mov         ecx,dword ptr [__imp_std::cout (1082A4h)]  
001017F0  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (1082A0h)]  
001017F6  cmp         edi,esp  
001017F8  call        @ILT+320(__RTC_CheckEsp) (101145h)  
001017FD  mov         ecx,eax  
001017FF  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (10829Ch)]  
00101805  cmp         esi,esp  
00101807  call        @ILT+320(__RTC_CheckEsp) (101145h)  
  a=10;
0010180C  mov         dword ptr [a],0Ah  
  cout<<++a+ ++a<<endl;//输出24
00101813  mov         eax,dword ptr [a]  
00101816  add         eax,1  
00101819  mov         dword ptr [a],eax  
0010181C  mov         ecx,dword ptr [a]  
0010181F  add         ecx,1  
00101822  mov         dword ptr [a],ecx  
00101825  mov         esi,esp  
00101827  mov         edx,dword ptr [__imp_std::endl (1082A8h)]  
0010182D  push        edx  
0010182E  mov         eax,dword ptr [a]  
00101831  add         eax,dword ptr [a]  
00101834  mov         edi,esp  
00101836  push        eax  
00101837  mov         ecx,dword ptr [__imp_std::cout (1082A4h)]  
0010183D  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (1082A0h)]
用反汇编来说话

 cout<<a+ ++a<<endl;// ==》a++; cout<<a+a;所以22
cout<<++a+ ++a<<endl // ==>a++;a++;cout<< a+a

#3
讷于言者2012-11-25 19:30
回复 2楼 yuccn
嗯,谢谢
1