这对于()的工作原理是什么?

时间:2017-06-09 10:39:58

标签: c++ for-loop

我在某些代码中遇到过以下内容:

for (i = M, j = N; i; )

i,j,M,N都是整数;这是做什么的?

6 个答案:

答案 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()); ii,它可隐式转换为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 != 0ifor循环体内没有变化,则会产生无限循环。