gpt4 book ai didi

c++ - 使用 -1 作为无符号 (size_t) 类型的标志值

转载 作者:可可西里 更新时间:2023-11-01 16:29:11 25 4
gpt4 key购买 nike

我使用 -1 作为返回类型为 size_t(无符号类型)的函数的标志值。

一开始我没有注意到它,特别是因为它没有在我的代码中造成任何错误(我用 x == -1 来检查它,而不是 x < 0)。

有什么微妙的原因我不应该保持原样吗?这什么时候可能会出乎意料?这个常用吗?

ptrdiff_t 不太常见,需要更长的输入时间,而且它并不是真正合适的类型,因为该函数返回数组的索引。

最佳答案

-1 将始终转换为最大无符号值,这是由于 4.7 Integral conversions 部分:

If the destination type is unsigned, the resulting value is the least unsigned integer congruent to the source integer (modulo 2n where n is the number of bits used to represent the unsigned type). [ Note: In a two’s complement representation, this conversion is conceptual and there is no change in the bit pattern (if there is no truncation). —end note ]

C99 的相同引用来自 6.3.1.3:

Otherwise, if the new type is unsigned, the value is converted by repeatedly adding or subtracting one more than the maximum value that can be represented in the new type until the value is in the range of the new type.49)

所以我们最终得到:

-1 + (UMAX + 1)

即:

UMAX

关于c++ - 使用 -1 作为无符号 (size_t) 类型的标志值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22801069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com