我有以下代码:
while( int()(uStartFrame - iFrameOffset) < 1)
{
iFrameOffset--;
}
uStartFrame和iFrameOffset都是无符号长整数,因此&lt;我认为声明有点困难。 但是,我认为我使用int()修复它。 但是循环运行无限,所以我猜它不起作用。
有人可以帮忙吗?
谢谢!
答案 0 :(得分:2)
while( uStartFrame < iFrameOffset + 1)
{
iFrameOffset--;
}
甚至更好
if(uStartFrame < iFrameOffset + 1)
iFrameOffset = uStartFrame - 1;
最后一行还显示可能的错误。如果uStartFrame
为0
,那么就没有unsigned long
变量x
可以履行uStartFrame == x + 1
。
答案 1 :(得分: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,这可能解释了为什么循环永远运行。
答案 2 :(得分:0)
您将测试(uStartFrame-iFrameOffset)转换为int,而不是iFrameOffset。因此,如果iFrameOffset很大(max可能是2 ^ 64-1 - 或者更大,具体取决于系统),那么你可能需要2 ^ 64个循环才能到达终点。
这可能高达千兆秒。所以,你应该重新考虑这个循环。这不是一个好主意。