string.length()与-1比较为什么会出现匪夷所思的结果
2024-10-02 02:01:10
今天调试程序发现了个匪夷所思的事情,-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类型的变量比较,结果就是我们想要的正常结果了。
最新文章
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(81)-数据筛选(万能查询)
- MyBatis 智能标签
- JavaScript的学习4
- linux 文件系统解析及相关命令
- Effective Java 67 Avoid excessive synchronization
- C# 文件读写FileInfo
- android几种定时器机制及区别
- 【hdu2896】病毒侵袭
- JavaScript 输入验证器工具
- Delphi中拖动无边框窗口的5种方法
- NodeJS系列-部署
- We Chall-Training: Encodings I -Writeup
- 前端的UI设计与交互之反馈示篇
- appium 元素定位find_element_by_android_uiautomator方法使用
- TensorFlow和深度学习-无需博士学位(TensorFlow and deep learning without a PhD)
- 2-(基础入门篇)Air202下载开发入门(给Air202下载第一个程序)
- Linux 中文输入法安装
- Win8应用开发 入门篇(三) UX交互导航模式
- UVa 11464 Even Parity (二进制法枚举)
- etl工具-Bireme