理解速记C++

use*_*577 1 c++ shorthand

我在C++书中有这个代码,我不确定这段代码意味着什么:

for ( ; counter < fooCnt &&
        (toLower(array[counter].getFooTitle()).find(x) == string::npos)
      ; counter++);
Run Code Online (Sandbox Code Playgroud)

这一切都在一条线上,是否有另一种方式可以编写代码?我不明白为什么还有";" 在for循环开头的变量之前....

小智 5

clause 1在for循环中是可选的.它表示循环直到array[counter].getFooTitle()).find(x)不等于string::nposcounter >= fooCnt

&&是短路AND运算符.如果忘了这部分,请回到你的真相表.

counter < fooCnt && (toLower(array[counter].getFooTitle()).find(x)==string::npos)表达式-2 counter++是表达式-3

counter 因此增加.

在C标准的6.8.5.3中:

1774声明

    for ( clause-1 ; expression-2 ; expression-3 ) statement
Run Code Online (Sandbox Code Playgroud)

表现如下:

1775表达式> expression-2是在每次执行循环体之前计算的控制表达式.

1776在每次执行循环体后,表达式-3被计算为void表达式.

1777如果子句1是一个声明,它声明的任何标识符的范围是声明的剩余部分和整个循环,包括其他两个表达式;

1778在控制表达式的第一次评估之前按执行顺序到达.

1779如果子句-1是一个表达式,则在第一次评估控制表达式之前将其计算为void表达式.

1780可以省略clause-1和expression-3.

1781省略的表达式-2被非零常量替换.

顺便说一下,for循环也可以被认为是一个while循环.