Blog of CodeJELLOW’S ENGINEERING NOTES
← 返回文章

C++string类的size()的返回值是无符号数

下面这个程序的执行结果是 答案是yes2,那yes1去哪里了??? 我也想知道!找了半天结果原来是有符号整型和无符号整型的转化问题 string类的size()默认是无符号整型,而且c++还有个特点 在有符号整型和无符号整型的比较中,自动将有符号整型数转换为无…

本文目录 ⌄

    下面这个程序的执行结果是

    TEXT
    #include<iostream>
    using namespace std;
    int main(){
        string s="hello";
        int k=0;
        if((k-s.size())<0){
            cout<<"yes1";
        }
        int temp=k-s.size();
        if((temp)<0){
            cout<<"yes2";
        }
    }
    
    

    答案是yes2,那yes1去哪里了???

    我也想知道!找了半天结果原来是有符号整型和无符号整型的转化问题

    string类的size()默认是无符号整型,而且c++还有个特点

    在有符号整型和无符号整型的比较中,自动将有符号整型数转换为无符号整型。

    所以k-s.size()是一个负数,恰巧负数的无符号整型大于0,所以yes1就不会输出。

    加一个强制类型转换就好了!

    TEXT
       if((int)(k-s.size())<0){
            cout<<"yes1";
        }

    这样yes1就正常输出了。

    PS:StackOverflow是真的好用,回复太快了

    图片暂不可用。

    调的时候Clion的debug坏了,cmake里有中文路径,这个问题也耽误了点时间…

    只想安安静静刷算法,怎么被CPP绕进去了!!!

    通过 RSS 订阅更新 →