gpt4 book ai didi

c - 为什么 "i =++i;"和 "i =++i + 2;"是未定义的行为?

转载 作者:行者123 更新时间:2023-12-02 07:57:29 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why are these constructs using pre and post-increment undefined behavior?

(14 个回答)


1年前关闭。




我找到了这篇文章:https://en.cppreference.com/w/cpp/language/eval_order

我不知道为什么i = ++i;i = ++i + 2;是未定义的行为。

第一个例子:

int i = 5;

i = ++i;

结果仍然是 6。

如果 i = ++i;被声明为未定义的行为,然后 i = ++j;也应该将其描述为未定义的行为(因为赋值可以在增量之前发生?)。

第二个例子:
int i = 5;

i = ++i + 2;

结果仍然是 8。

如果 i = ++i + 2;被声明为未定义的行为,然后 i = ++j + 2;也应该被描述为未定义的行为(因为赋值可以在增量和求和之前发生)?

最佳答案

是什么让 i = ++i; undefined behavior是你试图读写i在没有序列点的同一表达式中。
++ 执行的增量运算符被视为副作用,= 执行的赋值也是如此。运算符(operator)。对同一个对象有两个副作用,或者对同一个对象有一个副作用和读取,是导致问题的原因。任何可能的评估顺序都会产生相同的结果并不重要。
i = ++j;很好,因为没有对象被多次写入或在没有序列点的情况下在同一个表达式中读取和写入。

关于c - 为什么 "i =++i;"和 "i =++i + 2;"是未定义的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61933463/

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