2011-08-11 52 views
2

我是微優化code for identifying object types。我假設我可以使用用於檢查以下在同一模塊中實例化的兩個對象是否具有相同的類型:等於type_info地址是否意味着相同的類型?

SomeCommonBase& first = ...; 
SomeCommonBase& second = ...; 
const type_info& firstInfo = typeid(first); 
const type_info& secondInfo = typeid(second); 

if(&firstInfo == &secondInfo || firstInfo == secondInfo) { 
    //identical types 
} else { 
    //different types 
} 

的邏輯是,一旦返回type_info參考該參考後面的對象是保證live until the module is unloaded。所以一旦返回引用,其他對象就不能佔據相同的地址。

因此,如果地址匹配,那麼那些是相同的type_info對象和相同的數據類型。如果實現返回相同類型的type_info對象type_info::operator==將被調用並執行附加檢查。

那是一個正確的假設?

+0

相信的Visual Studio可能會爲你已經這樣做。小心不要爲時過早... –

+0

@Bo佩爾森:我仔細測量,看起來像你說得對 - 差別很小,我想這不僅節省了一個函數調用。無論如何,我不介意修改一小段代碼,以便在任何地方輕微加速。 – sharptooth

回答

3

明顯。

平等地址意味着兩個指針指代相同的對象在內存中。如果指針的類型爲type_info*,那麼顯然這意味着傳遞給typeid()的對象(即firstsecond)屬於同一類型。畢竟,兩個指針如何具有相同的地址,可能會引用不同的type_info對象,從而變成不同的類型?