静态constexpr成员存储

static constexpr member storage

本文关键字:存储 成员 constexpr 静态      更新时间:2023-10-16

如果我写这样的特性,

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的结果,或者直接(静态)使用它的任何地方。