如果Else声明缩进重要或不重要?(C++)

Kar*_* S. 0 c++ if-statement

if else语句中的缩进是否与代码的执行有任何关系,或者它只是为清洁代码做些什么?

Andrew Koening编写的Accelerated C++一书中的例子:

while(c != cols){
    if(r == pad + 1 && c == pad + 1){
      cout << greet;
      c+=greet.size();
    } else {

      if(r == 0 || r == rows - 1 || c == 0 || c == cols - 1)
        cout << "*";

      else
        cout << " ";
        ++c;


    }

  }
Run Code Online (Sandbox Code Playgroud)

无论是否r = 0,都执行c的前缀增量,但我不明白为什么.

如果if语句变为true,则打印星号.如果没有打印空格并且c递增.这就是我如何阅读它,但无论r或c的值是什么,c都会增加.

这就是它在书中所说的,但我找不到任何解释:

注意++ c的不同缩进; 引起注意的是,无论我们是否在边境,它都会被执行.

Tim*_*hns 15

空格不会影响C++运行时行为.(与某些其他语言不同,如Python).

我应该提一下,在你的else块中,你不使用大括号.因此,只有第一个statement(cout << " ";)将成为该else子句的一部分.随后++c;,无论将执行的价值rc.

请注意,最后一点是主观的,所以请用一粒盐...正如你所看到的,当从if ... else ...块中省略大括号时,可能会产生混淆.有些人认为它会导致更简洁的代码,但许多人(包括我自己)会争辩说你应该总是使用大括号.当您在大型团队中工作时,这一点尤其重要,因为代码会随着时间的推移而增长.我在生产代码中看到很多案例,其中一个if语句缺少大括号,有人在if条款中添加了第二行,而没有记住添加大括号.这没有按预期工作,导致浪费时间调试失败,只是因为省略了括号.

  • @Barmar对,但这就是OP所困惑的.所以希望我的重写措辞会有所帮助. (2认同)