【发布时间】:2017-08-26 07:49:12
【问题描述】:
我有以下代码,
if (index > ((v.size() >> 1) - 1)) { }
v.size() 为 0,index 为 1。执行不会进入 if 块。但是如果我把上面的代码改成,
int limit = (v.size() >> 1) - 1;
if (index > limit) { }
在 v.size() 和 index 的值相同的情况下,执行确实进入了 if 块。
为什么会发生这种行为?谢谢。
【问题讨论】:
-
可能是因为
v.size()不是int。但我们不知道它的作用,因为您的代码中缺少相关上下文。 -
啊,忽略警告...
-
这是由于隐式转换为无符号类型。第二种方法实际上是强制转换。好问题:我不明白反对票。
-
@Bathsheba 这个问题没有显示任何研究工作,并且不清楚因为所有重要部分(
index和v.size()的类型)都丢失了。 -
对于大一新生来说,这种行为是如此奇特,以至于很难知道如何开始这项研究。如果 OP 怀疑它是由类型决定的,那么这篇文章几乎是修辞——尽管这本身并没有错。我很确定我的许多最佳答案都是针对反问的。
标签: c++