C++ 中向量 STL 的 size() 函数与 INT_MIN 相比给出了意想不到的结果

问题描述 投票:0回答:2
#include <bits/stdc++.h>
using namespace std;

int main() {
    vector<int> v = {1,2,3};
    int maxi = INT_MIN;
    if(v.size() > maxi)
        cout<<"YES"<<"\n";
    else
        cout<<"NO"<<"\n";
    return 0;
}

当我在 C++ 14 ide 上运行此代码时,我得到的答案为“否”,这是意料之外的。 这种情况发生了什么?

c++ c++14 stdvector
2个回答
0
投票

正如评论中指出的,您正在比较有符号数字和无符号数字,这可能会导致一些意外的行为,只需转换为有符号整数,如下所示:

if((int)v.size() > maxi)


0
投票

INT_MIN
signed 类型,因此您在比较中遇到了签名/未签名的提升。

我建议您在编译时添加适当的警告标志,以提醒您注意此问题,这样您就可以避免它。

© www.soinside.com 2019 - 2024. All rights reserved.