gpt4 book ai didi

分配和后递增循环迭代器时的 C++ 无限循环(gcc 错误?)

转载 作者:太空狗 更新时间:2023-10-29 20:20:15 32 4
gpt4 key购买 nike

<分区>

前几天,我在我们的一个 C++ 应用程序中遇到了一个奇怪的拼写错误,它触发了代码进入无限循环。在 for 循环结束时,程序员不小心分配了 i = i++ 而不是仅仅递增 i++

for (int i = 0; i < 10; i = i++) {
cout << "i = " << i << endl;
}

输出:

i = 0
i = 0
i = 0
...

最奇怪的是,即使知道这是一个拼写错误,我也看不出为什么这段代码不起作用。据我所知,分配给 i 应该没有影响,因为 i 在分配后仍应递增。 (出于某种原因,它必须改为递增拷贝?但这似乎没有意义。)

另一个需要注意的有趣的事情是将赋值更改为 i =++i 不会产生无限循环。

这段代码在我们以前的编译器上没有产生无限循环:gcc version 4.4.7 20120313。我们最近升级到 gcc 版本 4.8.5 20150623,现在可以了。

问题是为什么这段代码在逻辑上看起来不应该产生无限循环,以及哪个编译器根据 C++ 标准正确解释了它?

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