执行下面的代码:
int main()
{
vector<int> a = { 1,2,3 };
int max_len = -1;
if (a.size() > max_len)
max_len = a.size();
printf("%d", max_len);
return 0;
}
最终输出的max_len仍未-1,因为a.size()返回的是size_t类型,可以看作是unsigned int类型,根据类型自动转换规则,在int与unsigned int进行比较时,int首先会转换为unsigned int,因此max_len转换为4294967295,导致比较错误。
因此负数与size_t类型比较时,首先要将size_t类型强制转换为int,即
if ((int)a.size() > max_len)
max_len = a.size();