gpt4 book ai didi

c++ - 序列点和运算符优先级之间的区别? 0_o

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:56 25 4
gpt4 key购买 nike

举个例子:

a =++a;

据说上面的语句有未定义的行为(我已经阅读了关于 UB on SO 的文章)

但是根据优先级规则运算符前缀++比赋值运算符=有更高的优先级

所以 a 应该先递增然后赋值给 a。所以每个评估都是已知的,那么为什么它是 UB ?

最佳答案

这里要理解的重要一点是,运算符可以产生值,也可以有副作用

例如 ++a 产生(计算为)a + 1,但它也有增加 a 的副作用。 a = 5 也是如此(计算结果为 5,同时将 a 的值设置为 5)。

所以这里有两个副作用,它们会改变 a 的值,这两个副作用都发生在序列点之间(可见的分号和前一个语句的末尾)。

由于运算符的优先级,两个运算符的求值顺序是明确定义的并不重要,因为处理它们的副作用的顺序仍然未定义。

因此有了 UB。

关于c++ - 序列点和运算符优先级之间的区别? 0_o,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7506704/

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