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;
最后一行还显示可能的错误。如果uStartFrame
是0
,那么没有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 个循环才能到达终点。
这可能长达千兆秒。因此,您应该重新考虑此循环。这不是一个粘糊糊的想法。
相关文章:
- 没有找到相关文章