string.length()与-1比较为什么会出现匪夷所思的结果
2015-09-09 20:52
399 查看
今天调试程序发现了个匪夷所思的事情,-1与string.length()比较永远是-1大,看下面代码
输出的结果是:-1>=str.length(),这看起来似乎很是离奇,改成下面的代码看看:
这回输出的是-1<str.length()
这两段程序看似应该输出一样的结果,可是实际却不是,这不禁让我想起来之前自己写的一篇博客,C++中的隐式类型换http://www.cnblogs.com/bewolf/p/4358006.html
一查,果然是这样的,str.length()的返回值是unsigned int,如果直接与-1比较的话,比较的过程int会被隐式转化成unsigned int,所以-1会变成很大的数,当然“-1就比3还要大了”,而如果将str.length()赋值给int类型的变量,那么会像被赋值的类型进行转换,所以str.length()会被转换成int类型,到时候就是-1和一个int类型的变量比较,结果就是我们想要的正常结果了。
#include<iostream> #include<string> using namespace std; int main() { string str; str="123"; int num=-1; //int len=str.length(); if(num<str.length()) { cout<<"-1<str.length()"; } else { cout<<"-1>=str.length()"; } return 0; }
输出的结果是:-1>=str.length(),这看起来似乎很是离奇,改成下面的代码看看:
#include<iostream> #include<string> using namespace std; int main() { string str; str="123"; int num=-1; int len=str.length(); if(num<len) { cout<<"-1<str.length()"; } else { cout<<"-1>=str.length()"; } return 0; }
这回输出的是-1<str.length()
这两段程序看似应该输出一样的结果,可是实际却不是,这不禁让我想起来之前自己写的一篇博客,C++中的隐式类型换http://www.cnblogs.com/bewolf/p/4358006.html
一查,果然是这样的,str.length()的返回值是unsigned int,如果直接与-1比较的话,比较的过程int会被隐式转化成unsigned int,所以-1会变成很大的数,当然“-1就比3还要大了”,而如果将str.length()赋值给int类型的变量,那么会像被赋值的类型进行转换,所以str.length()会被转换成int类型,到时候就是-1和一个int类型的变量比较,结果就是我们想要的正常结果了。
相关文章推荐
- 解决虚拟机Ping不同物理主机的问题-----在桥接模式下
- matlab基础学习——数组
- 【JZOJ】4211 送你一棵圣诞树
- POJ - 1287 Networking(最小生成树)
- S3C2410/S3C2440 NAND Flash
- Spring quartz 任务调度(注解方式)
- android studio命令大全
- 手机横屏时,键盘默认全屏显示
- oracle参数文件、控制文件、数据文件、日志文件存放位置查看
- linux文件查找命令
- 网上订学生票问题注意事项
- 从pdf中提取图中曲线(和数据点)的方法(papa的儿子)
- 【LeetCode】1 - Two Sum
- PowerDesigner反向生成PDM和name与注释互换
- 归并排序
- Android属性动画(http://developer.android.com/guide/topics/graphics/prop-animation.html)
- iOS程序启动过程
- Spark on Yarn+Hbase环境搭建指南(三)Spark安装
- 主项定理Master Method 计算时间复杂度
- Android开发:在onTouchEvent中处理任意时间的长按事件