【发布时间】:2018-08-22 15:01:18
【问题描述】:
我犯了一个愚蠢的错误 *p++;认为 p 将首先被取消引用,然后 p 指向的值会增加。所以我发现这更类似于:
*(p++);
因为后缀 ++ 自增运算符的优先级高于 * 解引用运算符。
但是现在我在考虑运算符优先级,我发现 postfix++ 比例如相等 == 运算符要高,但是在:
int a = 0;
if (0 == a++) // Condition is true
同样的道理!逻辑非:
int a = 0;
if (!a++) // Condition is true, a is incremented after the condition check
// even if it's higher precedence than !
所以我所看到的肯定还有更多。
我听说过从右到左和顺时针/螺旋规则,但每次我试图掌握它时,我都无法理解。
我不想要对评估顺序的完整解释,因为我可以通过自己的阅读来解决这个问题。但我至少是对的,这不仅仅是运算符优先级的问题吗?例如,*p++ 被评估的方式是因为 postfix++ 运算符具有更高优先级的答案只有一半正确或部分答案?
【问题讨论】:
-
后缀
++增加变量,但返回旧值。这就是后缀++的全部意义所在。 -
C 和 C++ 中的“优先级”是词法的。 “之前执行”不是您应该查阅优先级表的内容。
-
“运算符优先级”和“计算顺序”是完全不同的东西。
-
作为@n.m。说,优先级和顺序是不同的东西。优先级定义在
f(1)+g(2)*h(7)中,从f()调用返回的值将被添加到g()和h()值的乘积中,而评估顺序定义(或有时不定义)f()、@ 中的哪一个987654332@和h()可以先执行,后执行。
标签: c++ c operator-precedence