0

我有以下代码:

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

uStartFrame 和 iFrameOffset 都是无符号长的,所以我认为 < 语句有点困难。但是,我认为我使用 int() 修复了它。但是循环不定式地运行,所以我想它不起作用。

有人可以帮忙吗?

谢谢!

4

3 回答 3

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

甚至更好

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

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

于 2014-01-08T12:55:30.790 回答
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,这可能解释了为什么您的循环永远运行。

于 2014-01-08T12:55:32.260 回答
0

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

这可能是千兆秒。所以,你应该重新考虑这个循环。这不是一个好主意。

于 2014-01-08T12:59:35.780 回答