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) = d在 C 中一样,并且

  • 就像a ? b : (c = d)在 C++ 中一样。

于 2013-01-24T17:17:58.763 回答