请看看这个简单的程序:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> a;
std::cout << "vector size " << a.size() << std::endl;
int b = -1;
if (b < a.size())
std::cout << "Less";
else
std::cout << "Greater";
return 0;
}
我被它输出“大”,尽管很明显,-1小于0,我的理解是这样的事实混淆size
方法返回的无符号值,但相比仍适用于-1和0。所以这是怎么回事? 任何人都可以解释一下吗?
因为矢量的大小是一个无符号的整数类型。 你是一个签一个比较无符号的类型,两个互补负号的整数提升为无符号。 这相当于一个大的无符号值。
此代码示例说明你看到相同的行为:
#include <iostream>
int main()
{
std::cout << std::boolalpha;
unsigned int a = 0;
int b = -1;
std::cout << (b < a) << "\n";
}
输出:
假
用于签名vector::size()
为:
size_type size() const noexcept;
size_type
是一个无符号整数类型。 当比较无符号和符号整数,已签署的一个提升为无符号。 这里, -1
为负所以它翻转,有效地得到了的最大可表示值size_type
类型。 因此,它会比较如大于零。
-1无符号大于零更高的价值,因为高的位设置为表明它是阴性,但无符号比较使用此位扩大表示数字的范围,它不再作为一个符号位。 该比较为已完成(unsigned int)-1 < 0
其是假的。
文章来源: c++ vector size. why -1 is greater than zero