在测试程序中,v的大小为2,由于2大于-1,我觉得应该进入while循环,然后“!”应该无限打印。但是,while 循环被跳过了。这是为什么?我在 VS 2017 和 Ideone 中测试了代码。
#include <iostream>
#include <vector>
int main(){
std::vector<std::pair<int,float>> v = {{1,2.0},{2,2.0}};
std::cout << v.size();
while(v.size() > -1){
std::cout << "!";
}
}
当比较无符号类型的std::vector::size_type
和有符号类型的int
时,int
被转换为 std::vector::size_type
。 -1
变成一个非常大的无符号整数,大于 vector 的大小。因此 while
条件的计算结果为 false
并且 while 主体被跳过。如果你打开 compiler warnings ,你会得到类似的东西:
<source>:6:20: error: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, float> >::size_type' {aka 'long unsigned int'} and 'int' [-Werror=sign-compare]
6 | while(v.size() > -1){
|