今天调试程序发现了个匪夷所思的事情,-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类型的变量比较,结果就是我们想要的正常结果了。

string.length()与-1比较为什么会出现匪夷所思的结果的更多相关文章

  1. js报错: Uncaught RangeError: Invalid string length

    在ajax请求后得到的json数据,遍历的时候chrome控制台报这个错误:Uncaught RangeError: Invalid string length,在stackoverflow查找答案时 ...

  2. string length() 方法注意点

    突然意识到string length() 是跟文件的字符编码相关的 测试了下, 果然如此: 对于常见字, 结果是一样的, System.out.println("T中国123".l ...

  3. String.length()和String.getBytes().length

    1.字符与字节 抛出如下代码: public static void main(String[] args) { String str = "活出自己范儿"; System.out ...

  4. exception PLS-00215: String length constraints must be in range (1 .. 32767)

      exception PLS-00215: String length constraints must be in range (1 .. 32767) CreationTime--2018年8月 ...

  5. 【js】 Uncaught RangeError: Invalid string length

    今天项目比较催的比较着急,浏览器总是崩溃,后来报了一个Uncaught RangeError: Invalid string length(字符串长度无效) 的错误. 在ajax请求后得到的json数 ...

  6. int 与 string::length()

    今天在代码中遇到这样的问题 ; while (nStart < strTemp.length()) { ... } 感觉自己写的逻辑没有错误,但是,代码执行结果就是不对,结果单步调试到该处发现, ...

  7. 关于vector.size()和string.length() 的返回类型 size_type

    今天写循环的时候碰到一个问题,发现:string.length()返回的类型是size_type.它是unsigned 类型.string::size_type它在不同的机器上,长度是可以不同的,并非 ...

  8. 控制台提示“Invalid string length”的原因

    控制台提示“Invalid string length”,浏览器直接卡掉,是为什么呢? 答:因为在写嵌套循环时,定义的变量重名了,内层和外层用了同一个i变量. -THE END-

  9. Java for循环每次都通过list.size()和 string.length()获取大小是否消耗性能?

    前言 有人说在for循环之前用一个局部变量先获取到list.size().str.length(),然后在for循环的判断条件里通过这个局部变量替换list.size().str.length()会节 ...

随机推荐

  1. cocos2dx中加载图片资源的方法,和从内存中获取已经加载的图片资源的方法

    游戏中通常需要将常用的资源如:声音,图片,plist文件,提前加载进内存,以加快游戏的流畅度 1.预加载声音: SimpleAudioEngine::getInstance()->preload ...

  2. android聊天,存储聊天记录sqlite

    项目中有聊天模块,需要用到打开activity的时候初始化聊天记录的情况.大致情况如下: 辅助类:ChatSQLiteHelper   在第一次时会调用oncreate方法(判断的标准是schedul ...

  3. c++ freelockquque

    http://www.boost.org/doc/libs/1_56_0/doc/html/boost/lockfree/queue.html Class template queue boost:: ...

  4. DevExpress控件使用系列--ASPxTreeList

      控件功能 结合列表控件及树控件的优点,在列表控件中实现类型树的多层级操作 官方说明 http://documentation.devexpress.com/#AspNet/clsDevExpres ...

  5. c#中获取服务器IP,客户端IP以及其它

    客户端ip:Request.ServerVariables.Get("Remote_Addr").ToString();客户端主机名:Request.ServerVariables ...

  6. 剑指offer--面试题8

    题目:求旋转数组中的最小数字 以下为自己所写代码: #include "stdafx.h" #include <iostream> #include <excep ...

  7. uuid-不好之处

    数据库中直接存储UUID的坏处: 完全‘随机’的字符串,例如由MD5().SHA1().UUID()产生的.它们产生的每一个新值都会被任意地保存在很大的空间范围内, 这会减慢INSERT及一些SELE ...

  8. gcc / g++ 编译选项

    g++ -Wall -m64 -W -O2 a.cpp b.cpp -o a 用下面的命令编译,生成libtriangle.so  先生成动态库 g++ -g -fpic -shared -o lib ...

  9. Minimum_Window_Substring两种方法求解

    题目描述: Given a string S and a string T, find the minimum window in S which will contain all the chara ...

  10. *[hackerrank]ACM ICPC Team

    https://www.hackerrank.com/contests/w6/challenges/acm-icpc-team 这道题在contest的时候数据量改小过,原来的数据量需要进行优化才能过 ...