式が評価された後、または文全体が評価された後に後置インクリメント/デクリメント演算子が評価されますか?Postfix増分演算子の評価
#include<stdio.h>
void main()
{
int a=0;
int b=0;
printf("%d %d",a||b,b++); // Output is 1 0
}
マイコンパイラは、printf引数を右から左に評価します。式a || bの答えは1です。これは、|| bが評価される前にbがインクリメントされたことを意味します(つまり、b ++は式b ++を評価した直後にインクリメントされます)。
ここでは、Incrementing in C++ - When to use x++ or ++x?は、文全体の後に評価されます。
どちらが正しいですか?
どちらも正しくありません。この動作は未定義です。https://stackoverflow.com/questions/949433/why-are-these-constructs-using-undefined-behavior – interjay
を参照してください。そう多くのupvotesを受け取った答えは間違っていますか? –
@interjay一般に、変数が同じステートメントで繰り返されない場合の動作は何ですか? postfixは、式を評価した後、または文全体を評価した後に変数の値をインクリメントしますか? –