当向量v为空时,为什么是(0 <v.size() - 1)?

San*_*. K 2 c++ if-statement vector

我写了以下代码.它给出了意想不到的结果!

#include<iostream>
#include<vector>

using namespace std;

int main(){
  vector<int> v;

  if(0 < (v.size() - 1))
    cout << "entered" << endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我们打印v.size()它打印0.但它仍然进入if条件!为什么这样??

Sto*_*ica 10

v.size()有一个无符号的返回类型.从无符号0减去1会导致回绕到一些"非常大"的无符号数(这是模运算).

永远,0将小于一些"非常大"的数字.

使用标准容器并混合有符号/无符号索引/大小时,这是常见的问题.