在单行if或loop中使用大括号(即{})的目的是什么?

一月

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

  1. 使用缩进//确定
  2. 从不依赖运算符优先级-始终使用括号//确定
  3. 始终使用{}块-即使对于一行也不能// //为什么,为什么?
  4. 比较左侧的const对象// OK
  5. 使用unsigned表示> = 0 //好的技巧
  6. 删除后将Pointer设置为NULL-双重删除保护//不错

第三种技术对我来说尚不清楚:将一行放置在a中会得到{ ... }什么?

例如,使用以下奇怪的代码:

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++;

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

陆迁格里戈尔

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

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的答案指出了另一个很好的理由

我能想到的第三个是nested if

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

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

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

这显然是错误的,因为else与内部联系在一起if


编辑:由于这引起了一些注意,我将澄清我的看法。我正在回答的问题是:

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

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

始终使用{}块-即使仅一行//也不行,为什么?

我并不是说总是使用{}块。如果这是足够简单的条件和行为,那就不要。如果您怀疑以后有人会进入并更改您的代码以添加功能,请执行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章