今天调试程序发现了个匪夷所思的事情,-1与string.length()比较永远是-1大,看下面代码

#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
str="";
int num=-;
//int len=str.length();
if(num<str.length())
{
cout<<"-1<str.length()";
}
else
{
cout<<"-1>=str.length()";
}
return ;
}

输出的结果是:-1>=str.length(),这看起来似乎很是离奇,改成下面的代码看看:

#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
str="";
int num=-;
int len=str.length();
if(num<len)
{
cout<<"-1<str.length()";
}
else
{
cout<<"-1>=str.length()";
}
return ;
}

这回输出的是-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类型的变量比较,结果就是我们想要的正常结果了。

最新文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(81)-数据筛选(万能查询)
  2. MyBatis 智能标签
  3. JavaScript的学习4
  4. linux 文件系统解析及相关命令
  5. Effective Java 67 Avoid excessive synchronization
  6. C# 文件读写FileInfo
  7. android几种定时器机制及区别
  8. 【hdu2896】病毒侵袭
  9. JavaScript 输入验证器工具
  10. Delphi中拖动无边框窗口的5种方法
  11. NodeJS系列-部署
  12. We Chall-Training: Encodings I -Writeup
  13. 前端的UI设计与交互之反馈示篇
  14. appium 元素定位find_element_by_android_uiautomator方法使用
  15. TensorFlow和深度学习-无需博士学位(TensorFlow and deep learning without a PhD)
  16. 2-(基础入门篇)Air202下载开发入门(给Air202下载第一个程序)
  17. Linux 中文输入法安装
  18. Win8应用开发 入门篇(三) UX交互导航模式
  19. UVa 11464 Even Parity (二进制法枚举)
  20. etl工具-Bireme

热门文章

  1. Excel快捷键
  2. Http请求和响应应用
  3. linux 命令小结
  4. android 设置叠加父级响应点击事件
  5. android support Percent支持库开发
  6. c++ 继承多个类 及虚函数
  7. Asp.Net修改上传文件大小限制(修改web.config)
  8. 【UVA】【11021】麻球繁衍
  9. Matlab实现求a到b被c整除的个数
  10. 【Asp.Net MVC】Avoid Mass Assignment in ASP.NET MVC