C++如果跟着一个for循环块

Dre*_*mer 0 c++ if-statement

我记得有一次我看到有人写这样的C++代码:

if (something is true)
    for (int i = 0; i < max; i++) {
        //do something
        line 1;
        line 2;
        line 3;
        ....
        ....
    }
else
    ....
Run Code Online (Sandbox Code Playgroud)

它的工作原理与以下代码相同:

if (something is true) {  //note the bracket here
    for (int i = 0; i < max; i++) {
        //do something
        line 1;
        line 2;
        line 3;
        ....
        ....
    }
}
else
    ....
Run Code Online (Sandbox Code Playgroud)

我想知道编译器是否将for循环块视为嵌套在if子句中的一行?括号内的多行代码是否总是被视为一行?我不太明白编译器如何解析和分析它.

rmh*_*tog 5

这确实是正确的代码,虽然它可能很容易混淆读者.该if语句来考虑第下面的语句,因为它的then声明.代码之间{}通常被视为块或复合语句,包含其中的语句.类似地,该for语句被认为是一个语句,包括循环体,它是跟随它的第一个语句(并且可以再次是一个块).

  • 你不需要在这里说"考虑".`{stmt*}`_is_单一陈述.`for(...)stmt`也是如此.那么`if(condition)stmt`.将前两个放在一起,`for(...){stmt*}`是一个语句,然后`if(condition)for(...){stmt*}`. (2认同)