下面这个程序的执行结果是
#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绕进去了!!!