gpt4 book ai didi

c++ - 看起来实际上是无限的 'for' 循环

转载 作者:IT老高 更新时间:2023-10-28 12:02:16 26 4
gpt4 key购买 nike

我现在正在调试一些代码,我遇到了这一行:

for (std::size_t j = M; j <= M; --j)

(写的是我的老板,他正在度假。)

这对我来说真的很奇怪。

它有什么作用?对我来说,它看起来像一个无限循环。

最佳答案

std::size_t C++ 标准保证为 unsigned类型。如果你减少 unsigned type 从 0 开始,标准保证这样做的结果是该类型的最大值。

该环绕值始终大于或等于 M 1 所以循环终止。

所以 j <= M当应用于 unsigned type 是一种方便的说法,即“将循环运行到零然后停止”。

替代方案,例如运行 j比你想要的大一,甚至使用 slide 运算符 for (std::size_t j = M + 1; j --> 0; ){存在,尽管需要更多的输入,但可以说更清晰。我想一个缺点(除了它在第一次检查时产生的令人眼花缭乱的效果)是它不能很好地移植到没有无符号类型的语言,例如 Java。

还要注意,你的老板选择的方案“借用”了 unsigned 中的一个可能值。设置:在这种情况下,M设置为 std::numeric_limits<std::size_t>::max()不会有正确的行为。 实际上,在这种情况下,循环是无限的。 (这就是您所观察到的吗?)您应该在代码中插入对此效果的注释,甚至可能在该特定条件下断言。


1M为准不是 std::numeric_limits<std::size_t>::max() .

关于c++ - 看起来实际上是无限的 'for' 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41278210/

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