i++ 循环中出错。陷入无限循环 [重复]

i++ Error in loop.Stuck in an infinite loop [duplicate]

提问人:Varun Sahu 提问时间:8/17/2023 最后编辑:Jarod42Varun Sahu 更新时间:8/17/2023 访问量:45

问:

该程序在使用时卡在无限循环中,但在使用时会给出正确的输出。如果我们使用递增而不是递增前,为什么会发生这种情况。i++++i

#include <iostream>

int main (){
    int i = 0;
    while (i < 5)
    {
        std::cout << i;
        i = i++;
    }
}
C++ 循环 while 循环

评论

5赞 Pete Becker 8/17/2023
i=i++;试图一次做太多事情。若要递增,请使用 或 。i++ii++

答:

1赞 doctorlove 8/17/2023 #1

忽略循环,考虑

int i = 0;
i = i++;

调用后增量返回当前值,然后递增变量 。这意味着左侧的 , 将设置为当前值 0。因此,保持在零,您的循环永无止境。iii

相反,使用

int i = 0;
i = ++i;

调用 pre-increment,因此返回递增的值,因此设置为 1。i

如果你不使用,只是把i =

int i = 0;
++i;

int i = 0;
i++;

i每次增量后将等于 1。

评论

0赞 Pete Becker 8/17/2023
post-increment 可以在语句末尾递增;它不必立即递增。因此,在此分析级别上,结果可能是 0 或 1。但是,无论如何,在没有干预序列点的情况下尝试修改两次。因此,程序的行为是未定义的。当然,您可以为这个特定的表达式假设各种合理的操作序列,但一般规则适用于您(和编译器)无法分析的更一般的情况,这就是行为未定义的原因。(C++20 可能搞砸了这个)i = i++i
0赞 doctorlove 8/18/2023
公平的@PeteBecker - 我试图给出一个高水平的答案,但你是对的。