一,问题的来源python
在使用stl的时候,常常要遍历容器。遍历容器有几种方法,一种就是使用下标遍历。app
在使用下标遍历的时候,常常要用到一个遍历的循环变量,每每这个变量一顺手就写成了:ide
这个i在通常的状况下是没有问题的,而后最近突发奇想,想像python那样,可以支持负的下标。spa
好比v是一个vector,v[-2]表示后两个元素。code
二,问题的描述blog
假设有这么一段简单的程序:ip
-2跟2比较输出的是 false,也就是-2要大于2.get
这个是怎么一回事呢。编译器
三,问题的缘由博客
其实上一段程序编译的时候会有一个常见的编译器warning:
“warning C4018: “<”: 有符号/无符号不匹配”,一般warning咱们也不太在乎,可是指不定
何时,就耗掉你几个小时。
这个waring就是说,在比较的时候,两边的符号不一致。
在式子:numIndex<numbers.size() 中
numIndex是有符号的,numbers.size()是无符号的。在有符号整数和无符号整数比较的时候,
有符号的整数会向无符号整数转换,这个就是缘由。
四,问题的思考
那有符号的numIndex转换成无符号的的整数究竟是多少呢?
其结果是
-2:4294967294
也就是说-2转换成了4294967294,这个数固然比2要大。
那为何是这个数呢?
由于C++中,int的大小是4个字节,也就是32位。2^32-2也就是这个数。
更多系列文章敬请访问:个人我的博客 第九兔