C 中的向量大小与空向量的差异
考虑以下代码:
#include <vector> #include <iostream> using namespace std; int main() { vector<int> value; cout << value.size() << endl; // output 0 cout << value.size() - 1 << endl; // output 18446744073709551615 }
代码打印 0对于第一个 cout,如预期所示指示空向量。但是,第二个 cout 打印一个很大的正数 (18446744073709551615)。为什么它不是 -1,正如人们直观所期望的那样?
理解无符号类型
要理解这种行为,我们需要考虑向量大小的类型功能。 vector::size() 返回 size_t 值,它是无符号数据类型。无符号数据类型只能表示正数和 0。负数不能用这些类型表示。
当我们从空向量的大小中减去 1 时,我们会得到预期的 -1 值。但是,由于 size_t 是无符号的,因此 -1 值会溢出到该数据类型可以表示的最大正值,在本例中为 18446744073709551615。
因此,第二个 cout 语句显示此溢出的结果,而不是比预期的 -1 值。
以上是为什么在 C 中从空向量的大小中减去 1 会得到一个很大的正数而不是 -1?的详细内容。更多信息请关注PHP中文网其他相关文章!