Turbo C++和GCC(在Windows上使用代码块)以不同方式评估相同的三元表达式

Aka*_*ash 0 c++ gcc turbo-c++ operator-precedence

我有这个表达

(*p % 3 != 0) ? *p = (*p) + 1 : *p = (*p) + 2;
Run Code Online (Sandbox Code Playgroud)

在Turbo C++中,如果*p为11,则计算结果为14;如果*p为33,则计算结果为35

在GCC(Windows)中,它分别评估为12和35,这是预期的

括号为以下格式时,它工作正常:

(*p % 3 != 0) ? (*p = (*p) + 1) : (*p = (*p) + 2); 
Run Code Online (Sandbox Code Playgroud)

这种差异有什么解释吗?我猜它归结为编译器使用的优先顺序的差异,但无法确定根本原因

Ker*_* SB 6

三元条件运算符在C和C++中是不同的.a ? b : c = d解析表达式......

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

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