提问人:Varun Sahu 提问时间:8/17/2023 最后编辑:Jarod42Varun Sahu 更新时间:8/17/2023 访问量:45
i++ 循环中出错。陷入无限循环 [重复]
i++ Error in loop.Stuck in an infinite loop [duplicate]
问:
该程序在使用时卡在无限循环中,但在使用时会给出正确的输出。如果我们使用递增而不是递增前,为什么会发生这种情况。i++
++i
#include <iostream>
int main (){
int i = 0;
while (i < 5)
{
std::cout << i;
i = i++;
}
}
答:
1赞
doctorlove
8/17/2023
#1
忽略循环,考虑
int i = 0;
i = i++;
调用后增量返回当前值,然后递增变量 。这意味着左侧的 , 将设置为当前值 0。因此,保持在零,您的循环永无止境。i
i
i
相反,使用
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 - 我试图给出一个高水平的答案,但你是对的。
评论
i=i++;
试图一次做太多事情。若要递增,请使用 或 。i
++i
i++