我在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::npos或counter >= fooCnt
&&是短路AND运算符.如果忘了这部分,请回到你的真相表.
counter < fooCnt && (toLower(array[counter].getFooTitle()).find(x)==string::npos)表达式-2 counter++是表达式-3
counter 因此增加.
在C标准的6.8.5.3中:
1774声明
Run Code Online (Sandbox Code Playgroud)for ( clause-1 ; expression-2 ; expression-3 ) statement表现如下:
1775表达式> expression-2是在每次执行循环体之前计算的控制表达式.
1776在每次执行循环体后,表达式-3被计算为void表达式.
1777如果子句1是一个声明,它声明的任何标识符的范围是声明的剩余部分和整个循环,包括其他两个表达式;
1778在控制表达式的第一次评估之前按执行顺序到达.
1779如果子句-1是一个表达式,则在第一次评估控制表达式之前将其计算为void表达式.
1780可以省略clause-1和expression-3.
1781省略的表达式-2被非零常量替换.
顺便说一下,for循环也可以被认为是一个while循环.
| 归档时间: |
|
| 查看次数: |
835 次 |
| 最近记录: |