2013-03-23 80 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

還有絕對沒有兩種語句的速度不同。

過早的優化是一件壞事。不要花太多時間擔心這種事情。