0

こんな表情をしています

(*p % 3 != 0) ? *p = (*p) + 1 : *p = (*p) + 2;

Turbo C++ では、*p が 11 の場合は 14 に評価され、*p が 33 の場合は 35 に評価されます。

GCC (Windows) では、それぞれ 12 と 35 に評価されます。

次の形式に括弧で囲むと、正常に機能します。

(*p % 3 != 0) ? (*p = (*p) + 1) : (*p = (*p) + 2); 

この違いの説明はありますか?コンパイラが使用する優先順位の違いに帰着すると思いますが、根本的な原因を特定することはできません

4

1 に答える 1

6

三項条件演算子は、C と C++ で異なります。式a ? b : c = dが解析されます...

  • (a ? b : c) = dCのように、そして

  • a ? b : (c = d)C++ のように。

于 2013-01-24T17:17:58.763 に答える