【C/C++】前置++と後置++およびcout/printf演算順序

5509 ワード

前置++  は先に++を計算します.後置++  は先に計算してから++にします.戻り値  前置++は左、後置++は右の値を返します
int main()   
{   
    int a=1;   

    (a++)++;  //       
    ++(a++);  //       
    a++ = 1;   //       
    (++a)++;  //OK   
    ++(++a);  //OK   
    ++a = 1;   //OK   
}  

戻りタイミング  前置++は、式全体の計算が完了したときに返されます.  後置++計算が完了すると、すぐに戻ります.
cout/printf関数の演算順序  ただしvs 2013では、後方、すなわち右から左の順に実行される.   もし問題があれば、問題を持って次のコードを見てみましょう.
いくつかの奇妙な現象
int a = 32;
cout << a << ' ' << ++a;
//  33 33
int a = 32;
cout << a << ' ';
cout << ++a;
//  32 33

  後置++
int a = 32;
cout << a++ << ' ' << a;
//  32 33
int a = 32;
cout << a << ' ' << a++;
//  33 32

printfにもこのような問題があります
int a = 3;
printf("%d %d %d", a--,a--,a--);
//  1 2 3
int a = 3;
printf("%d %d %d", --a,--a,--a);
  0 0 0
int a = 3;
printf("%d %d %d", a--,--a,a--);
//  1 0 3
//         
//a--,  3               
//--aa=2,--a   1,         
//a--,  1
//       ,--aa     00
int a = 3;
printf("%d %d %d", a--,a--,--a);
//  1 2 0
int a = 3;
printf("%d %d %d", --a,a--,--a);
//  0 2 0
//  
//--aa  2,   
//a--,  2
//--aa=1,--a a=0,    
//          ,  ,  a=00

参考リンク:前置++と後置++の違い