2016-07-30 232 views
1

如果我寫這樣的特質,靜態constexpr成員存儲

template <typename T> 
struct is_int { 
    static constexpr bool value = false; 
}; 

template <> 
struct is_int<int> { 
    static constexpr bool value = true; 
}; 

實際存儲在內存中的程序運行時的value?例如,如果我在一百萬種不同的類型上使用此特性,程序是否使用1 MB的內存來存儲這些值?

套用,是仍有任何優勢,使用

template <typename T> 
struct is_int { 
    enum { value = 0; } 
}; 

template <> 
struct is_int<int> { 
    enum { value = 1; } 
}; 

回答

1

至少,一個編譯器將映射多個等於常量到彼此上,這樣所有的類/實例將共享單個字節(或四字節,或其他)。

根據常量值的使用情況(在它所涉及的代碼中),編譯器可能會將其完全移除爲「不必要的中間值」,因爲它可以導出IF的結果或使用它的任何地方直接(靜態地)。