如果有和没有花括号

时间:2013-03-23 14:44:39

标签: c++ c

我读了一个关于if陈述

的问题

哪个代码更快/相同?

  

if(a == 1)返回0;

     

if(a == 1){return 0; }

在这种情况下,速度或编译器真的有什么不同吗?

提前谢谢。

4 个答案:

答案 0 :(得分:8)

关于运行时速度,它们完全相同

C ++ 11 Standard将第一种形式定义为第二种形式的隐式变体。事实上,根据第6.4 / 1段:

  

[...] selection-statement 中的子语句   (每个子语句,else语句的if形式)隐式定义块范围(3.3)。如果selection-statement中的子语句是单个语句而不是复合语句,那就好像   它被重写为包含原始子语句的复合语句。 [实施例

if (x)
    int i;
     

可以等效地重写为

if (x) {
    int i;
}
     

因此在if语句之后,我不再在范围内了。 - 结束示例]

解析额外大括号所需的额外编译时间非常小,可以安全地忽略它。 选择使代码更易于阅读或维护的表单

答案 1 :(得分:5)

除了在编译时解析大括号所需的微小,微小的额外时间外,性能没有区别。

答案 2 :(得分:3)

运行时速度完全相同。编译速度可能会有大约纳秒级的差异。然而,出于所有实际原因和目的,这两个陈述是相同的。

答案 3 :(得分:2)

两种陈述的速度都存在绝对没有的差异。

过早优化是一件坏事。不要花太多时间担心这些事情。