制作快捷方式if语句是否安全

时间:2016-09-03 08:14:01

标签: c++

我目前正在开发闪存卡项目,我需要检查文件的第一行以确保它是正确的类型,但在其他行上使用相同的功能会提出一个问题。我知道在一些编译器中这会起作用,但我不确定。例如:

if(line == 1 && execLine(line));

是否可以安全地假设如果行不是1,它甚至不会尝试execLine?

2 个答案:

答案 0 :(得分:2)

在没有运算符重载的情况下,可以安全地假设如果行不是1,则不会对execLine进行求值。

if()是多余的。 line == 1 && execLine(line)就足够了。

答案 1 :(得分:1)

内置的中缀布尔运算符&&||保证了短路行为,但用户定义的运算符重载却没有。

假设execLine返回bool,而不是存在用户定义的&&重载的某种类型,

的行为
if( line == 1 && execLine( line ) );

......保证。

声明在几个方面是不合适的,所以让我们剖析它。

首先,带有空内部语句的控制语句最好用包含单个分号的花括号块表示,因为它会在视觉上显示它是空的

if( line == 1 && execLine( line ) ) {;}

if在这里完全是多余的,所以更好:

line == 1 && execLine( line );

从这里我们可以从两个不同的方向前进。如果我们想要保留这个形式,我们将解决编译器发出的可能而且不太可能的愚蠢警告,通过强制转换为void,这是这个特殊演员的主要目的:告诉编译器,有意丢弃结果值。

(void)( line == 1 && execLine( line ) );

但是人们应该意识到这只是伪装的if。它不是原始if,而是if

if( line == 1 ) { execLine( line ); }