我有以下代码:
while( int()(uStartFrame - iFrameOffset) < 1)
{
iFrameOffset--;
}
uStartFrame 和 iFrameOffset 都是无符号长的,所以我认为 < 语句有点困难。但是,我认为我使用 int() 修复了它。但是循环不定式地运行,所以我想它不起作用。
有人可以帮忙吗?
谢谢!
我有以下代码:
while( int()(uStartFrame - iFrameOffset) < 1)
{
iFrameOffset--;
}
uStartFrame 和 iFrameOffset 都是无符号长的,所以我认为 < 语句有点困难。但是,我认为我使用 int() 修复了它。但是循环不定式地运行,所以我想它不起作用。
有人可以帮忙吗?
谢谢!
while( uStartFrame < iFrameOffset + 1)
{
iFrameOffset--;
}
甚至更好
if(uStartFrame < iFrameOffset + 1)
iFrameOffset = uStartFrame - 1;
最后一行还显示了可能的错误。如果uStartFrame
是0
,那么就没有可以满足的unsigned long
变量。x
uStartFrame == x + 1
演员表错了,你应该这样演员,
(int)(uStartFrame - iFrameOffset) < 1
但是这种 C 风格的演员并不是真正的 C++ 风格,在你的情况下 astatic_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 循环才能到达终点。
这可能是千兆秒。所以,你应该重新考虑这个循环。这不是一个好主意。