如果我写这样的特质,
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; }
};
答案 0 :(得分:1)
编译器至少会将多个相等的常量映射到彼此,因此所有类/实例将共享一个字节(或四个字节,或其他)。
根据常量值的使用(在引用的代码中),编译器可能会将其完全删除为“不必要的中间”,因为它可以导出IF
或其他任何地方的结果它直接使用(静态)。