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

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

#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就不会输出。

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

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

这样yes1就正常输出了。

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

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

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

发表评论