如图, nums 是一个 vector 的容器,它里面只有一个值,也就是说他的 size 是 1 ;那么问题来了,为什么把他减到负数,他就变成一堆乱的数字了?求解
1
messyidea 2016-05-23 23:39:58 +08:00
num.size() 是一个 unsigned int
|
2
hxndg 2016-05-23 23:47:31 +08:00
@messyidea 实际上我看这个问题的时候第一反应也是 unsigned int ,转换的问题了,但是问题是为什么数字这么大呢?实际上-1 转成 unsigned int 时输出的是 4294967295 ;复现 lz 程序发现我这里输出也是他那个 18 几几几
|
3
liqingcan OP |
6
messyidea 2016-05-23 23:54:32 +08:00
@hxndg 不太清楚,我随便弄了一个 size 为 1 的数组,在 linux , g++上编译是 4294967295 ,编译器不同可能也有关系。也许 vc++为了提醒用户所以返回了乱码。
|
8
hxndg 2016-05-23 23:57:34 +08:00
|
9
publicID002 2016-05-23 23:59:20 +08:00 via Android
@messyidea 是 std::size_t ,具体是什么类型由编译器决定,只是可能是 unsigned int
|
10
messyidea 2016-05-24 00:07:47 +08:00
@publicID002 恩。谢提醒。还没对 STL 深究过(
|
11
htfy96 2016-05-24 00:10:58 +08:00 via Android
@publicID002 是 typename vector<int>::size_type 。。。
|
12
hxndg 2016-05-24 00:24:57 +08:00
@publicID002 万分感谢 stl 深入剖析都是供着。。。没看过。。。
|
13
ryd994 2016-05-24 09:35:21 +08:00
因为 size_t 一般是 unsigned long
|
14
soli 2016-05-24 10:26:30 +08:00
这不是一个 C++ 的问题。是个 C 的问题。
|
15
publicID002 2016-05-24 21:57:50 +08:00
@htfy96 感谢指正。本来我看几年前的资料还说两个一定相同,今天去查标准就找不到相关的规定了,看来不知道什么时候改过了 orz...
|