2012-07-06 54 views
3

我和朋友在前幾天討論哪種代碼更好。C++代碼樣式 - 創建對象的最佳位置

方案A:

int function() 
{ 
    largeobject a; 
    //do some stuff without a 
    //do some stuff with a 
} 

案例B:

int function() 
{ 
    //do some stuff without a 
    largeobject a; 
    //do some stuff with a 
} 

所以它的代碼是在速度和可讀性的長期更好。

+4

注意,它們都是函數聲明:一個名爲'a'的函數,它不接受任何參數並返回一個'largeobject'。 – hmjd 2012-07-06 14:53:36

+0

關於函數聲明,您應該查看[C++ FAQ Lite](http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.2) – maba 2012-07-06 14:56:30

+3

首先使其可讀。無論哪種情況,編譯器都會找到最優的機器碼。 – tenfour 2012-07-06 14:57:02

回答

10

您應該儘可能在本地聲明變量/對象的實例。所以,在這種情況下,B是最好的選擇。

請考慮如果您在函數體的頂部聲明它,其他人閱讀您的代碼時可能會懷疑您實際使用該對象的位置。因此,通過使聲明接近您實際使用的位置,將使其更易於閱讀。

不應該有情況A和B之間

任何巨大的性能差異

有一些特殊情況,如分配的內存或例如一個線程池大塊。在這些情況下,由於可能需要時間和資源消耗,你可能需要找到一個更好的地方來分配它們。

如果您還不熟悉編程,您可能需要考慮閱讀Scott Meyers的書籍,Effective C++。第26項談到:儘可能推遲變量定義。

+2

同意,但具有完整的方法/函數範圍的對象應該直接到函數/方法的開頭 – BigMike 2012-07-06 14:55:01

+2

@BigMike當然,因爲它將在整個方法/函數 – ALOToverflow 2012-07-06 14:58:48

2

您應該使用案例B.在您需要之前不需要創建對象。

另外,編譯器不會將largeobject a();解釋爲使用默認構造函數創建對象,而是將其作爲函數聲明創建。這被稱爲「最令人頭疼的解析」。

+0

期間使用謝謝,我編輯了它 – Caesar 2012-07-06 15:20:34

0

案例B是最好的。這種情況在S.Mcconnell的書中有解釋 - 完整的代碼。而你錯了:

那麼哪個代碼在速度和可讀性方面更好。

由於其他原因,情況B更好。

+0

我'好奇。你想知道是什麼原因嗎? – kratenko 2012-07-06 15:11:48