C++是否应该尽量少使用无符号数

flying_music 2015-12-04 09:24:23
无符号数和有符号数的比较经常会出问题,比如当用作数组长度时,如果从尾到头历遍数组for(size_t i=N;i>=0;i++)那应该在索引值等于-1时停止,但这样就会出现溢出错误,而且一些错误很难提前发现,是否应该尽量少用无符号数啊那?
...全文
385 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-12-07
  • 打赏
  • 举报
回复
因噎可以废食?!
707wk 2015-12-05
  • 打赏
  • 举报
回复
数组太长那只能说你数据结构没弄好
booirror 2015-12-05
  • 打赏
  • 举报
回复
数组长度一般int就够了,如果需要很大的数组,一般是动态内存分配或使用vector。unsigned表示的范围大得多,如果你确定你的数据是大于0的,适合用unsigned的
lm_whales 2015-12-05
  • 打赏
  • 举报
回复
应该尽量多用,无符号数数,比有符号数简单,不容易出错
ri_aje 2015-12-05
  • 打赏
  • 举报
回复
应该多用无符号的才对呢。 像主楼那种根本就是死循环,逻辑都不对,还是先把要紧的搞正确,再操心符号的问题吧。
ri_aje 2015-12-05
  • 打赏
  • 举报
回复
引用 11 楼 cyfcsd 的回复:
[quote=引用 7 楼 ri_aje 的回复:] 应该多用无符号的才对呢。 像主楼那种根本就是死循环,逻辑都不对,还是先把要紧的搞正确,再操心符号的问题吧。
前面着急打错了,应该是for(size_t i=N;i>=0;i--),可就像你说的这样也是死循环,但这样的循环不也是正常需要的吗,可无符号数不行啊[/quote] 逆向循环的情况明显少于正向循环的情况,就好像倒车明显比汽车往前开的时候少一个道理。 对于绝大部分正向循环的情况,应该使用无符号。 对于少数需要逆向循环的情况,可以酌情使用有符号。另一种方法就是仍然使用无符号,但是以 0 为截至点退出循环,循环体里面可以用循环变量 -1 的方式获得想要的值。 不能为了满足少数几个用例,就破坏绝大部分用例。
mewiteor 2015-12-05
  • 打赏
  • 举报
回复
引用 10 楼 cyfcsd 的回复:
[quote=引用 5 楼 mewiteor 的回复:] 我觉得不应该是
for(size_t i=N;i>=0;i++)
而应该是
for(size_t i=N;i--;)
恩恩是打错了,应该是for(size_t i=N;i>=0;i--),你这么写也是当i==0就终止了,也不会对数组第一个元素操作啊[/quote]按照我的写法,i在循环体内的范围是从N-1到0,毕竟是i--
paschen 版主 2015-12-05
  • 打赏
  • 举报
回复
写代码的时候就要想好,如果你要让他与-1比较,你肯定需要设计成有符号数 无浮号数也是很常用的,而且从汇编角度看效率还会略高于有符号数
mewiteor 2015-12-05
  • 打赏
  • 举报
回复
我觉得不应该是
for(size_t i=N;i>=0;i++)
而应该是
for(size_t i=N;i--;)
flying_music 2015-12-05
  • 打赏
  • 举报
回复
引用 3 楼 zxh707wk 的回复:
数组太长那只能说你数据结构没弄好
???不是数组太长,是数组下标用无符号数索引停不下来
哈利_蜘蛛侠 2015-12-05
  • 打赏
  • 举报
回复
引用 12 楼 cyfcsd 的回复:
以前刚学时是一直用int,后来感觉用size_t更适合,但就会出现上面说的这种问题,我在这个过程中已经有过至少三次这样的错误了,就是先用size_t后来发现不对,再改回int,感觉这个东西没有增加什么好处,倒是添了不少麻烦,是我编程的风格不对吗?你们编程过程中没有出现过这种情况吗
你这样:

for(size_t i=0; i < arraySize; ++i)
{
    // 接下来将arraySize - i 作为要处理的下标
}
paschen 版主 2015-12-05
  • 打赏
  • 举报
回复
引用 12 楼 cyfcsd 的回复:
[quote=引用 6 楼 paschen 的回复:] 写代码的时候就要想好,如果你要让他与-1比较,你肯定需要设计成有符号数 无浮号数也是很常用的,而且从汇编角度看效率还会略高于有符号数
以前刚学时是一直用int,后来感觉用size_t更适合,但就会出现上面说的这种问题,我在这个过程中已经有过至少三次这样的错误了,就是先用size_t后来发现不对,再改回int,感觉这个东西没有增加什么好处,倒是添了不少麻烦,是我编程的风格不对吗?你们编程过程中没有出现过这种情况吗[/quote] 你不能因为用错了他就说他没用
flying_music 2015-12-05
  • 打赏
  • 举报
回复
引用 6 楼 paschen 的回复:
写代码的时候就要想好,如果你要让他与-1比较,你肯定需要设计成有符号数 无浮号数也是很常用的,而且从汇编角度看效率还会略高于有符号数
以前刚学时是一直用int,后来感觉用size_t更适合,但就会出现上面说的这种问题,我在这个过程中已经有过至少三次这样的错误了,就是先用size_t后来发现不对,再改回int,感觉这个东西没有增加什么好处,倒是添了不少麻烦,是我编程的风格不对吗?你们编程过程中没有出现过这种情况吗
flying_music 2015-12-05
  • 打赏
  • 举报
回复
引用 7 楼 ri_aje 的回复:
应该多用无符号的才对呢。 像主楼那种根本就是死循环,逻辑都不对,还是先把要紧的搞正确,再操心符号的问题吧。
前面着急打错了,应该是for(size_t i=N;i>=0;i--),可就像你说的这样也是死循环,但这样的循环不也是正常需要的吗,可无符号数不行啊
flying_music 2015-12-05
  • 打赏
  • 举报
回复
引用 5 楼 mewiteor 的回复:
我觉得不应该是
for(size_t i=N;i>=0;i++)
而应该是
for(size_t i=N;i--;)
恩恩是打错了,应该是for(size_t i=N;i>=0;i--),你这么写也是当i==0就终止了,也不会对数组第一个元素操作啊
flying_music 2015-12-04
  • 打赏
  • 举报
回复
引用 1 楼 OExpress 的回复:
没有这个说法吧
那表示数组长度的时候呢?更提倡用有符号还是无符号
CyberLogix 2015-12-04
  • 打赏
  • 举报
回复
没有这个说法吧

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧