web-dev-qa-db-ja.com

操作c = a +++ bはどういう意味ですか?

次のコードは私を混乱させています

int a=2,b=5,c;
c=a+++b;
printf("%d,%d,%d",a,b,c);

出力が3,5,8になることを期待しました。これは、主にa ++が3に等しい2 +1を意味し、3 + 5が8に等しいため、3,5,8を期待しました。結果は3,5,7であることがわかります。これが事実である理由を誰かが説明できますか?

31
user595985

これはc = a++ + bとして解析され、a++はポストインクリメントを意味します。つまり、aの値を取得してa + b == 2 + 5を計算した後にインクリメントします。

neverこのようなコードを書いてください。

90
Fred Foo

Maximal Munch Rule はそのような式に適用され、それに従って、式は次のように解析されます。

c = a++ + b;

つまり、aはポストインクリメントされます(a++)なので、aの現在の値(ポストインクリメントの前)が+bを使用した操作。

39
Nawaz

a ++はpost増分です。つまり、式はaの値を取り、thenは1を加算します。
c = ++ a + bはあなたが期待することをします。

6
David

これは悪いプログラミングスタイルの例です。

まったく判読できませんが、aの増分をポストするため、aの現在の値をbに合計し、その後、aを増分します。

2
Stefano

最長一致 ルールによると、コンパイラの字句解析フェーズでa ++ + + bとして解析されます。したがって、結果の出力。

1
Vineet G

a ++は式の後に評価されます。

c = ++ a + b;あなたが考えたことをあなたに与えるでしょう。

1
jrok

ポストインクリメント演算子a ++は、式でaの値が評価された後で、aのtge値を変更します。 aの元の値は2であるため、cの計算に使用されます。 aの値は、++の評価後に新しい値を反映するように変更されます。

1
Patrick87

a ++ + b ..itは結果7を返し、aの式の値が3に更新された後、ポストインクリメント演算子のため

1
Aman Agarwal

ここでc = a +++ b; c =(a ++)+ b;つまり、ポストインクリメント。 a ++では、a、b、cを印刷する次のステップで変更が行われます。 ++ aでは、つまり、prefix-incrementの変更は同じステップで行われ、出力は8になります。

0
Alok Negi