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==
將被調用並執行附加檢查。
那是一個正確的假設?
相信的Visual Studio可能會爲你已經這樣做。小心不要爲時過早... –
@Bo佩爾森:我仔細測量,看起來像你說得對 - 差別很小,我想這不僅節省了一個函數調用。無論如何,我不介意修改一小段代碼,以便在任何地方輕微加速。 – sharptooth