我正在阅读我的C ++讲师的一些讲义,他写了以下内容:
- 使用缩进//确定
- 从不依赖运算符优先级-始终使用括号//确定
- 始终使用{}块-即使对于一行也不能// //为什么,为什么?
- 比较左侧的const对象// OK
- 使用unsigned表示> = 0 //好的技巧
- 删除后将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] 删除。
我来说两句