静态constexpr成员存储
static constexpr member storage
如果我写这样的特性,
template <typename T>
struct is_int {
static constexpr bool value = false;
};
template <>
struct is_int<int> {
static constexpr bool value = true;
};
程序运行时,value
是否实际存储在内存中?例如,如果我在一百万种不同的类型上使用这个特性,程序是否使用1MB的内存来存储这些值?
换句话说,使用还有什么好处吗
template <typename T>
struct is_int {
enum { value = 0; }
};
template <>
struct is_int<int> {
enum { value = 1; }
};
编译器至少会将多个相等的常量映射到彼此上,因此所有类/实例都将共享一个字节(或四个字节,或其他任何字节)。
根据常量值(在引用的代码中)的使用情况,编译器可能会将其作为"不必要的中间值"完全删除,因为它可以派生IF
的结果,或者直接(静态)使用它的任何地方。
相关文章:
- 访问存储在向量C++中的结构的多态成员
- 如何创建存储指向成员函数的指针的类 (C++)
- 哪些存储了不完整类型的 STL 数据结构可以用作类成员?
- 使用成员函数和存储值定义书籍类
- 指向(数据)成员的指针作为非类型模板参数,例如具有自动存储持续时间/无链接
- 在C++中,如果成员引用在其声明中初始化,为什么需要存储空间?
- 通过放置 new 重用数据成员存储
- 如何将提升正常分发存储为类成员
- C++:将未知类型的对象存储为成员变量的类
- structtm是否将时区信息存储为其数据成员
- 是否值得使用位移在单个字节中存储多个小数据成员?
- 将列表迭代器存储为成员
- 是否有更好的方法来封装成员对象可以访问的共享存储池?
- 流的奇怪问题.不能存储具有特定值的成员变量的对象
- 不从成员函数C 存储返回值认为不良习惯
- 在数据结构中存储成员函数
- 如何通过接口存储成员函数指针
- 存储成员指针与成员值
- 存储成员函数的位置
- GCC如何在内存中存储成员函数