std::vector 大小否定悖论:揭晓
在一个令人费解的程序中,我们观察到比较 -1
尽管 std::vector理解无符号整数类型
std::vector 的 size 成员返回无符号整数类型。无符号整数类型专门表示正整数,缺乏存储负值的能力。当无符号类型遇到负值时,它会通过称为补码转换的过程自动转换为大的正值。比较中的类型提升
在比较中-1 说明性示例以下代码片段演示了基本类型上的相同行为:#include <iostream> int main() { std::cout << std::boolalpha; unsigned int a = 0; int b = -1; std::cout << (b < a) << "\n"; // prints false }在此示例中,有符号整数 -1 在与 a 比较之前被提升为无符号整数。因此,结果为 false。
结论
总而言之,在原始 std::vector 比较中观察到的令人费解的行为是由负整数的类型提升引起的与无符号类型相比。负整数被有效地转换为大的正值,从而导致意外的结果。最佳实践是,在未显式将有符号值转换为无符号类型的情况下,避免比较有符号和无符号整数。以上是为什么 `std::vector` 的 `-1 < a.size()` 计算结果为 False?的详细内容。更多信息请关注PHP中文网其他相关文章!