c++ - 对单行 if 或循环使用大括号(即 {})的目的是什么?

标签 c++ c coding-style curly-braces defensive-programming

我正在阅读我的 C++ 讲师的一些讲义,他写了以下内容:

  1. Use Indentation // OK
  2. Never rely on operator precedence - Always use parentheses // OK
  3. Always use a { } block - even for a single line // not OK, why ???
  4. Const object on left side of comparison // OK
  5. Use unsigned for variables that are >= 0 // nice trick
  6. Set Pointer to NULL after deletion - Double delete protection // not bad

我不清楚第三种技巧:将一条线放入 { ... }

以这个奇怪的代码为例:

int j = 0;
for (int i = 0 ; i < 100 ; ++i)
{
    if (i % 2 == 0)
    {
        j++;
    }
}

并将其替换为:

int j = 0;
for (int i = 0 ; i < 100 ; ++i)
    if (i % 2 == 0)
        j++;

使用第一个版本有什么好处?

最佳答案

让我们尝试在增加 j 时也修改 i:

int j = 0;
for (int i = 0 ; i < 100 ; ++i)
    if (i % 2 == 0)
        j++;
        i++;

哦不!来自 Python,这看起来不错,但实际上并非如此,因为它相当于:

int j = 0;
for (int i = 0 ; i < 100 ; ++i)
    if (i % 2 == 0)
        j++;
i++;

当然,这是一个愚蠢的错误,但即使是有经验的程序员也会犯。

另一个很好的理由ta.speot.is's answer 中指出.

第三种我能想到的是嵌套if的:

if (cond1)
   if (cond2) 
      doSomething();

现在,假设您现在想要在 cond1 不满足时 doSomethingElse()(新功能)。所以:

if (cond1)
   if (cond2) 
      doSomething();
else
   doSomethingElse();

这显然是错误的,因为 else 与内部 if 相关联。


编辑:由于这引起了一些关注,我将澄清我的观点。我要回答的问题是:

What's the benefit of using the 1st version?

我已经描述过了。有一些好处。但是,IMO,“总是”规则并不总是适用。所以我不完全支持

Always use a { } block - even for a single line // not OK, why ???

我并不是说 总是 使用 {} block 。如果这是一个足够简单的条件和行为,请不要。如果您怀疑有人稍后可能会进来并更改您的代码以添加功能,请这样做。

关于c++ - 对单行 if 或循环使用大括号(即 {})的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12193170/

相关文章:

functional-programming - 有没有更简洁的方式来编写这段代码?

c# - connect 方法应该返回一个值吗?

c++ - 这很可怕吗?可复制的互斥量以保护类成员

c - 解决 valgrind 中的无效写入错误

c - 此代码的输出不是我所期望的。问题在哪里?

c - xcode 和 Dev-C++ 的不同行为

android - 使用对类成员的严格访问和模块化代码使得对 APK 进行逆向工程变得更加困难

c++ - OpenCV imwrite 浮点图像,使用哪种转换?

c++ - 这是编译器编译的顺序

c++ 函数重载,使 fwrite/fread 的行为像 PHP 版本