执行下面的代码:
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();
本文讨论了在C++编程中,当int类型与无符号类型size_t进行比较时可能出现的问题。代码示例展示了如何由于类型转换规则导致的错误比较,以及如何通过显式类型转换避免这种错误。理解不同数据类型的比较规则对于编写健壮的代码至关重要。
757

被折叠的 条评论
为什么被折叠?



