zoukankan      html  css  js  c++  java
  • string.length()与-1比较为什么会出现匪夷所思的结果

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

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

  • 相关阅读:
    Ubuntu安装k8s
    SecureCRT连ubuntu
    硬盘安装ubuntu系统
    发布服务
    使用rancher2建k8s集群--个人学习记录
    spring boot 注解
    用STS构建spring boot
    使用js调用麦克风并录音
    全国省市区信息,mysql数据库记录
    ef core 3 migration
  • 原文地址:https://www.cnblogs.com/bewolf/p/4795931.html
Copyright © 2011-2022 走看看