gpt4 book ai didi

c++ - `while (i != 0 && (a[i].p != 0 || a[i].q != 0));` 除了卡住还能做什么?

转载 作者:行者123 更新时间:2023-11-30 03:16:32 26 4
gpt4 key购买 nike

<分区>

我正在阅读别人的 C++ 代码,我对具有以下结构的一行感到困惑:

while (i != 0 && (a[i].p != 0 || a[i].q != 0));

在哪里

  • i 是一个无符号整数索引
  • a 是一个包含 struct 的数组,其中包含整数成员 pq

请注意,while 循环的主体是空的(分号)。另请注意,条件内没有递增/递减运算符或任何赋值。

我不明白这条线怎么可能做任何事情。好像只有两种情况:

  1. 不满足条件,立即退出循环。
  2. 条件满足,循环进入无限循环,程序永远死机。

是否有任何可以想象的上下文使这条线有意义,即做一些不平凡的事情,也不会永远卡住?

一些理论上可以想象但不太可能的“解决方案尝试”:

  • 某些 !=[]&&|| 运算符在某些应用程序中已被覆盖奇怪的意想不到的方式
  • 该循环实际上是一个“忙等待”循环,ia的内容被另一个线程改变,最终“泄漏”,因为内存模型不保证在另一个线程中的写入不会变得可见,即使没有任何适当的同步。但这看起来非常丑陋,所以请原谅我想到了这种可能性。

这一行是否有任何上下文可能变得有意义,或者这只是一些错误代码,一个永远不会满足的条件,应该重构为 assert 而不是?

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