c++ 当在for循环中检查这种类型的条件时,实际上会发生什么?

dzjeubhm  于 2022-11-19  发布在  其他
关注(0)|答案(2)|浏览(121)

我不明白for循环和if条件中检查的条件有什么区别。两者的行为方式不同吗?
当我写:

int num = 10;
for(int i = 0; i < 15 && num; i++){
    cout << i << " ";
}

它只检查是否为i < 15,而不检查是否为i < num,并从0到14一直打印。
但同时,如果我写一个if条件:

if(x < 15 && num)

它会同时检查x < 15x < num

qc6wkl3g

qc6wkl3g1#

&& num并不像你想象的那样,如果你期望它的意思是“现在执行前面的操作,用num替换(whatever),然后再做一次”,那么不,它离那个很远。
它检查x〈15和x
你错了,它不会这样做。测试num == 12, x == 13来说服你自己。如果你想同时检查x < 15x < num,就这样说:

if (x < 15 and x < num)

或者可以使用&&

if (x < 15 && x < num)

&&and是完全相同的两个拼写)。

jmo0nnb3

jmo0nnb32#

循环的条件(无论是for循环、while循环还是do..while循环)和if的条件都是布尔上下文,因此工作方式完全相同。
您的两个Assert都是错误的,因为在您的示例中,编译器从不检查i < numx < num,这不是&&的工作方式。
for(int i = 0; i < 15 && num; i++)中,条件被解析为(i < 15) && (num != 0),在您的示例中实际上是(i < 15) && true,或者简单地是(i < 15)。如果您想检查(i < num),则需要这样编写代码:

for(int i = 0; i < 15 && i < num; i++)

或者:

for(int i = 0; i < min(15,num); i++)

if(x < 15 && num)中,条件被解析为(x < 15) && (num != 0),在您的示例中实际上是(x < 15) && true,或者简单地是(x < 15)。如果您想检查(x < num),则需要这样编写代码:

if(x < 15 && x < num)

或者:

if(x < min(15,num))

相关问题