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