我在某些代码中遇到过以下内容:
for (i = M, j = N; i; )
i,j,M,N
都是整数;这是做什么的?
答案 0 :(得分:5)
与
相同i
答案 1 :(得分:1)
此for循环的退出条件为List<Long> customerIds = Clist.map(Customer::id).filter(Objects::notNull);
List<Long> licenseIds = Llist.map(Customer::id).filter(Objects::notNull);
List<Long> sharedIds = cusomerIds
.stream()
.filter(customerId -> licenseIds.contains(customerId))
.collect(Collectors.toList());
,i
为i
,它可隐式转换为int
,这意味着循环将一直运行到bool
(因为i == 0
计算结果为0
,任何其他值的计算结果为false
)。循环本身不会修改true
,但如果循环的主体没有,那么你有一个无限循环。
答案 2 :(得分:1)
可以将循环重写为
i = M;
j = N;
while(i) {
//...
}
答案 3 :(得分:1)
简答:
for (i = M, j = N; i; )
上面的for循环,将i初始化为M,j初始化为N,并循环直到i为非零(或为假)。如果在for循环中i的值没有改变,循环将无限期地执行。
长答案:
在for循环中,有三个部分(来自C++ standard guidelines)
for (clasue-1 ; expression-2; expression-3 )
其中(强调粗体文字)
表达式&gt;表达式-2是控制表达式 在每次执行循环体之前进行评估。
表达式-3被评估为void表达式 每次执行循环体后。
如果clause-1是声明,则任何变量标识符的范围 它声明是声明的剩余部分和整个循环, 包括其他两个表达式。 按顺序达到 在第一次评估控制表达式之前执行。
可以省略子句-1和表达式-3。
所以在你的情况下,
第-1条是
i = M,j = N
这是在for循环中使用的i和j的声明/初始化。
表达式-2是
我
由于表达式-2应该是布尔表达式,因此i的值控制退出条件。通常,值0被视为false,而所有其他值都为true。因此循环将执行,直到i的值为0。
所以你的循环转换为
i = M; j = N;
while(i){//陈述。 }
答案 4 :(得分:0)
在C和C ++中,您可以使用int
作为布尔变量。实际上,在C中它甚至不存在bool。
for循环的最常见形式如下:
for(init; condition; increment)
它有三个语句,所以第二个语句只是可以被评估为true或false的东西,整数可以。
答案 5 :(得分:0)
for (i = M, j = N; i; ) {
// body
}
与:
相同i = M;
j = N;
while (i != 0) {
// body
}
如果M != 0
和i
在for
循环体内没有变化,则会产生无限循环。