例如
size_t x = -1u;
if (x == -1u)
...
有效?
如果这是有效的,它将阻止警告。 当然在32位系统上x应该是0xffffffff而在64位上 系统应该是0xffffffffffffffff。
-Jochen
例如
size_t x = -1u;
if (x == -1u)
...
有效?
如果这是有效的,它将阻止警告。 当然在32位系统上x应该是0xffffffff而在64位上 系统应该是0xffffffffffffffff。
-Jochen
1u
有类型 unsigned int
。然后使用一元来否定这一点 -
运营商。行为如下:
无符号数量的负数通过从2减去其值来计算ñ,其中n是提升操作数中的位数(C ++ 11 5.3.1 / 8)。
-1u
因此保证为您提供可表示的最大值 unsigned int
。
要获得可由任意无符号类型表示的最大值,可以进行强制转换 -1
到那种类型。例如,对于 std::size_t
考虑一下
static_cast<std::size_t>(-1)
。
我总是使用~0U来达到“无符号,所有位都开启”的目的。
编译器实现依赖行为很烦人。但是你应该能够做到这一点:
size_t x = 0;
x--;
if ((x+1) == 0)
虽然这是 技术上 有效的代码,您依赖于依赖于实现的行为:将负数转换为无符号的溢出处理。但是,如果您需要有意义地将size_t与-1进行比较,因为您正在使用的API调用需要它,系统已经搞砸了,但您的代码可能会起作用,因为它们必须在另一侧执行相同的操作的API。
这可能是你想要的:
size_t x = -1ull;
if (x == -((size_t)-1ull))
...
x
将被设置为可能的最大整数,可能不是所有位都设置。使用~0表示。