4

除了可读性之外,当使用和不使用括号编写单行循环/条件语句时,性能或编译时间是否有任何差异?

例如,以下之间是否有任何区别:

if (a > 10) 
    a = 0;

if (a > 10)
{
    a = 0;
}

?

4

6 回答 6

6

当然性能上没有区别。但是引入错误的可能性是有区别的:

if (a>10)
  a=0;

如果有人扩展代码并稍后编写,

if (a>10)
  a=0;
  printf ("a was reset\n");

由于缺少大括号,这将始终被打印。有些人要求你总是使​​用大括号来避免这种错误。

于 2012-11-08T11:20:21.347 回答
4

与几个答案相反,在编译时存在有限但可以忽略不计的性能差异。运行时任何类型的差异都为零。

于 2012-11-08T11:18:33.440 回答
2

不,没有区别,编译器会去掉无意义的大括号、换行符等。

编译时间将略有不同,但如此微小,以至于您阅读此答案所花费的时间远远多于您恢复编译速度的时间。随着计算能力的增加,这个成本会进一步下降,但降低可读性的成本不会。

简而言之,做可读的事情,它在任何其他意义上都没有任何有用的区别。

于 2012-11-08T11:15:04.353 回答
2

机器代码不包含这样的大括号。编译后就没有了{}。使用最易读的形式。

于 2012-11-08T11:18:36.343 回答
1

好吧,它们在运行时当然没有区别。但是为了维护您的代码,您当然应该使用第二种方式。

为什么我这么说是,假设将来,您需要在块中添加更多行扩展它们。然后,如果您将第一种方式合并到旧代码中,那么您必须在添加一些新代码之前添加。在第二种情况下您不需要这样做。if-elsebraces

因此,将来向第二种方式添加代码比向第一种方式添加代码要容易得多。

此外,如果您使用的是第一种方式,您会出现输入错误,例如semi-colon在 your 之后if,如下所示:-

if (a > 0);
    System.out.println("Hello");

因此,您可以看到您的Hello将始终被打印出来。如果您已将这些错误curly braces附加到您的if.

于 2012-11-08T11:17:39.273 回答
-1

这取决于其余的编码指南。如果左大括号始终单独在一条线上,我认为放下大括号没有任何问题。但是,如果左大括号位于if行尾,我发现在添加内容时很容易忽略。所以我会去:

if ( a > 10 ) {
    a = 0;
}

无论行数如何,或者:

if ( a > 10 )
{
    //  several statements...
}

和:

if ( a > 10 )
    a = 0;

当只有一个语句时。然而,重要的是所有代码都是一致的。如果您正在处理使用几种不同样式的现有代码库,我总是在新代码中使用大括号,因为您不能指望代码样式来确保它们是否存在,它们会在高度可见的位置。

于 2012-11-08T11:43:44.100 回答