vector<int> score= {1,1,1,1,1};
int z = score.size();
for(int j=score.size() - 1; j >= z - 5; --j)
cout << j << endl;
现在的代码很好,但是当我用
替换该行时会导致错误:for(int j=score.size() - 1; j >= score.size() - 5; --j)
从打印出来的中,我已经推断出这是因为j趋向于-1或更大。我的问题是,为什么当我用z替换size()函数时会发生这种情况?for循环内部不修改size[i].
在这个表达式中:
j >= z - 5
由于j
和z
都是int
,所以比较工作很好,因为当j
变成-1
时,左边可以是-1
。
在这个表达式中:
j >= score.size() - 5
右边是unsigned
,所以左边也隐式地转换为unsigned
。当j
变成-1
时,转换得到一个非常大的整数,并且比较不能按预期工作。
size()
是unsigned,因此size()-1
和size()-5
也将是unsigned(尽管您将第一个值分配给signedint
)。j >= score.size() - 5
正在比较有符号整数j
和无符号整数size()-5
。