2013-08-24 155 views
0

創建100+ newObjs時,什麼是快:初始化列表Vs的靜態常量初始化

//initialization list 
    struct struct_Obj { 
    ...tonsOfVars 
    struct_Obj() : tonsOfVars(init) {} 
    } 

或者:

//static const already constructed, call the copy constructor(?) 
static const struct_Obj defaultStruct_Obj = { tonsOfVars(init) }; 
struct_Obj newObj = defaultStruct_Obj 

TonsOfVars將意味着多個不同的變量(從POD到結構/班)

我會假設靜態常量,因爲它調用複製構造函數(意思是1 op?)vs調用初始化列表中的每個初始化器?
雖然對此的常見回答是「描述它」,即使這樣做也不會給我一個解釋爲什麼它更快。

+0

如果我不得不冒險猜測,假設tonsOfVars是原語,並且您的初始化程序將使用const值進行初始化,那麼我會說默認的構造函數會更快。 – Kindread

回答

0

這實際上取決於tonsOfVars中的類型。

我會假設靜態const,因爲它調用複製構造函數(意思是1 op?)vs調用initalization列表中的每個初始化器?

它調用struct_Obj的一個拷貝構造函數,但它仍然需要爲每個字段調用拷貝構造函數。

如果他們都是POD數據,那麼根本沒有差別。但是,在某些類型中,默認構造函數可能比複製構造函數更快(或更慢),所以這會有所作爲。

+0

關於默認構造函數的有趣點 - > operator =使第二個變慢。謝謝:) – VeNoM

+0

@VeNoM對不起,這是一個錯誤。它應該運行復制構造函數而不是'operator ='。同樣,這取決於'tonsOfVars'中的類型。 –

0

我認爲它取決於tonsOfVars構造函數的速度與tonsOfVars的拷貝構造函數的速度,如果它們都是編譯器生成的或者做了淺拷貝,那麼我想不出爲什麼初始化列表不會更快。

取決於tonsOfVars是什麼類型,你編譯器的優化也可以有所作爲。