我曾经在一个返回类型为size_t(无符号类型)的函数中使用-1作为标志值。
一开始我没有注意到这个问题,特别是因为它并没有导致我的代码出错(我是用x == -1进行检查,而不是x < 0)。
有没有什么微妙的原因让我不能将其保留?它可能在什么情况下表现出意外行为?这种方法常用吗? ptrdiff_t不太常见,打字需要更长时间,而且它实际上也不是适当的类型,因为该函数返回一个数组的索引。
一开始我没有注意到这个问题,特别是因为它并没有导致我的代码出错(我是用x == -1进行检查,而不是x < 0)。
有没有什么微妙的原因让我不能将其保留?它可能在什么情况下表现出意外行为?这种方法常用吗? ptrdiff_t不太常见,打字需要更长时间,而且它实际上也不是适当的类型,因为该函数返回一个数组的索引。
x < 0
替换x == -1
的检查吗?如果你想让编译器优化掉这些检查,那么是的,请继续这样做。 - Praetoriansize_t
保证是unsigned
类型,并且在可移植性方面,使用-1
作为最大无符号值是标准保证的。当然,你也可以使用std::numeric_limits<size_t>::max()
,但这是同样的事情。 - Shafik Yaghmour