为什么以下比较会得出不同的结果?

时间:2019-03-31 17:56:15

标签: c++ stl

我正在尝试比较以下两个量:整数“ i”和向量v的大小。

#include <vector>
#include <iostream>

using namespace std;

int main()
{
    vector <int> v(26,0);
    int i = -1;

    cout << i << " " << v.size() << endl;
    if (i < v.size()) cout << "a1" << endl;
    else cout << "b1" << endl;

    if (-1 < 26) cout << "a2" << endl;
    else cout << "b2" << endl;
    return 0;
}

当我运行以下代码时,得到的输出是: -1 26 11 a2

我希望它能给: -1 26 a1 a2

为什么会这样?

1 个答案:

答案 0 :(得分:1)

i < v.size()的两个参数是int(已签名)和size_t(未签名)。在这种情况下,C ++规则规定已签名的数量首先转换为未签名的数量。因此-1转换为无符号数量。这是通过将无符号范围添加到所讨论的数字来完成的。在-1的情况下,这将导致最大可能的无符号数量,该数量大于v.size()的任何数量,从而使同谋为假。

我确定你知道为什么-1 < 26是正确的。

在比较整数时,尽量不要混用有符号和无符号类型。可能会导致意外。您的编译器应对此发出警告。