2013-03-23 130 views
2

我读了一个关于if的问题如果有和没有大括号

哪个代码更快/相同?

如果(一个== 1)返回0;

如果(A == 1){返回0; }

在这种情况下速度或编译器真的有什么区别吗?

预先感谢您。

+12

我敢打赌,编译器发现这个问题令人反感。比这更好! – Pubby 2013-03-23 14:46:53

+0

其实我相信只要提出这个问题,你就会花更多的时间等待答案,而不是所有你的组合编译器调用都需要解析这个额外的对{}'。 – Zeta 2013-03-23 14:48:40

+1

括号不重要;真正的区别在于括号。 'return 0;'比* return(0)*更快* – 2013-03-23 14:49:24

回答

8

关于运行时的速度,他们是完全一样的东西

的C++ 11标准定义的第一种形式为第二形式的一个隐式的变化。每个段落6.4/1,在一个事实:

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

if (x) 
    int i; 

可以等效改写为

if (x) { 
    int i; 
} 

if语句之后。因此,i是不再在范围内。 - 年底例如]

解析额外的括号所需的额外的编译时间是如此之小,它可以安全地忽略。 选择使代码易于阅读或维护的形式

5

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

+3

..以及将大括号放在那里的时间 – scones 2013-03-23 14:47:25

3

运行速度是完全一样的。编译速度可能会在几纳秒左右的差异。然而,出于所有的实际原因和目的,这两个陈述是相同的。

2

还有绝对没有两种语句的速度不同。

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