我正在阅读我的 C++ 讲师的一些讲义,他写了以下内容:
- Use Indentation // OK
- Never rely on operator precedence - Always use parentheses // OK
- Always use a { } block - even for a single line // not OK, why ???
- Const object on left side of comparison // OK
- Use unsigned for variables that are >= 0 // nice trick
- 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 。如果这是一个足够简单的条件和行为,请不要。如果您怀疑有人稍后可能会进来并更改您的代码以添加功能,请这样做。
我是一名优秀的程序员,十分优秀!