前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >string.length()与-1比较为什么会出现匪夷所思的结果

string.length()与-1比较为什么会出现匪夷所思的结果

作者头像
用户1215536
发布2018-02-05 15:53:31
7290
发布2018-02-05 15:53:31
举报

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

代码语言:javascript
复制
#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(),这看起来似乎很是离奇,改成下面的代码看看:

代码语言:javascript
复制
#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类型的变量比较,结果就是我们想要的正常结果了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-09-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档