gpt4 book ai didi

c++ - 后缀增量的运算符优先级

转载 作者:行者123 更新时间:2023-11-30 20:03:34 25 4
gpt4 key购买 nike

我犯了一个愚蠢的错误: *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 !

所以从我所看到的来看,肯定还有更多内容。

我听说过从右到左和顺时针/螺旋规则,但每次我试图掌握它时,我都无法理解。

我不想对评估顺序进行完整的解释,因为我可以通过自己的阅读来解决这个问题。但我至少是对的,这不仅仅是操作符优先级的问题?例如,因为 postfix++ 运算符具有更高的优先级,所以 *p++ 的计算方式是正确的,或者是答案的一部分?

Link to answer

最佳答案

您的主张,条件为真,a 在条件检查后递增,即使它的优先级高于 !,是错误的。< br/>条件检查后,a 不必递增。它随时都可能发生。唯一确定的是,在表达式 !a++ 中,a 的旧值将用于 ! 运算符。
运算符优先级将有助于对操作数进行分组。 !a++ 中的操作数将被分组为 ! (a++)。这种分组并不意味着 a 将在 ! 运算符应用于 a++ 结果之前递增。

关于c++ - 后缀增量的运算符优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49271700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com