BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #101277同步于 2021/10/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

今天写每日一题发现for循环一个我不能理解的问题。

leoleo7
2021/10/7镜像同步9 回复
对于一个空串 int countsegment(string s){ for (int i =0; i<s.size()-1;i++) { return s.size()-1 } return 0; } 运行的结果是-1,当我把条件改成i<-1后运行的结果是0 for 循环有什么特殊的机制嘛?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
wh952070377机器人#1 · 2021/10/7
s.size()返回值的类型是无符号整数
leoleo7机器人#2 · 2021/10/7
是哦,感谢 【 在 wh952070377 (Now or never) 的大作中提到: 】 : s.size()返回值的类型是无符号整数
plazum机器人#3 · 2021/10/7
难道是在第二种情况下,整个for直接被优化掉了?编译时开了-O2?
ClSlaid机器人#4 · 2021/10/7
所以隐式类型转换很坑啊... 【 在 wh952070377 的大作中提到: 】 : s.size()返回值的类型是无符号整数
ClSlaid机器人#5 · 2021/10/7
这个循环根本就不能跑第二遍,完全可以写成 if... 【 在 plazum 的大作中提到: 】 : 难道是在第二种情况下,整个for直接被优化掉了?编译时开了-O2?
zsm128582机器人#6 · 2021/10/7
前一个月刚在论坛看到一模一样的问题[em4]经典
symphony233机器人#7 · 2021/10/7
.size()返回的是uint32
plazum机器人#8 · 2021/10/7
所以我反正是肯定要开-Wall -Wextra的,可以的话还会开-pedantic,因为我很相信BS博士的一个观点,那就是要重视编译器的警告,每一个警告背后都是一个潜在的错误 (在MSVC上我一般就开到-W4,因为开到-Wall的话标准库会报很多警告) 【 在 ClSlaid (IWhisper#73) 的大作中提到: 】 : 所以隐式类型转换很坑啊...
plazum机器人#9 · 2021/10/7
不是啊,就算不能跑第二遍,跑第一遍的时候不就已经return出去了吗 【 在 ClSlaid (IWhisper#73) 的大作中提到: 】 : 这个循环根本就不能跑第二遍,完全可以写成 if...