C++未签名的长而<

C++ unsigned long and <

本文关键字:C++      更新时间:2023-10-16

我有以下代码:

while( int()(uStartFrame - iFrameOffset) < 1)
{
    iFrameOffset--;
}

uStartFrame 和 iFrameOffset 都是无符号的长,所以我认为

有人可以帮忙吗?

谢谢!

while( uStartFrame < iFrameOffset + 1)
{
    iFrameOffset--;
}

甚至更好

if(uStartFrame < iFrameOffset + 1)
    iFrameOffset = uStartFrame - 1;

最后一行还显示可能的错误。如果uStartFrame0,那么没有unsigned long变量x可以满足uStartFrame == x + 1

演员阵容错了,你应该这样投,

(int)(uStartFrame - iFrameOffset) < 1

但这种 C 风格的演员表并不是真正的C++风格,在您的情况下,最好是static_cast

static_cast<int>(uStartFrame - iFrameOffset) < 1
static_cast<unsigned long>(uStartFrame - iFrameOffset) < 1

除此之外,当你编写int()(x)时,你定义了一个返回整数且不接受任何参数的函数,然后使用 uStartFrame - iFrameOffset 作为参数调用它。它甚至不应该编译,至少 gcc 4.8 正确地抱怨了这一点。

您的编译器显然确实对其进行了编译,甚至可能错误地将其视为返回未初始化整数(很可能为 0)的函数,这可能解释了为什么您的循环永远运行。

你正在将测试(uStartFrame-iFrameOffset)转换为int,而不是iFrameOffset。因此,如果 iFrameOffset 很大(最大值可能是 2^64-1 - 或更大,具体取决于系统),那么您可能需要 2^64 个循环才能到达终点。

这可能长达千兆秒。因此,您应该重新考虑此循环。这不是一个粘糊糊的想法。

相关文章:
  • 没有找到相关文章