【C/C++】前置++と後置++およびcout/printf演算順序
5509 ワード
前置++ は先に++を計算します.後置++ は先に計算してから++にします.戻り値 前置++は左、後置++は右の値を返します
戻りタイミング 前置++は、式全体の計算が完了したときに返されます. 後置++計算が完了すると、すぐに戻ります.
cout/printf関数の演算順序 ただしvs 2013では、後方、すなわち右から左の順に実行される. もし問題があれば、問題を持って次のコードを見てみましょう.
いくつかの奇妙な現象
後置++
printfにもこのような問題があります
参考リンク:前置++と後置++の違い
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
//--a, a=2,--a 1,
//a--, 1
// ,--a , a 0, 0
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
//
//--a,a 2,
//a--, 2
//--a, a=1,--a a=0,
// , , a=0, 0
参考リンク:前置++と後置++の違い