c++ - 静态 constexpr 成员存储

标签 c++ templates c++11 c++14

<分区>

如果我这样写一个 trait,

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

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

是程序运行时实际存储在内存中的吗?例如,如果我在一百万种不同的类型上使用这个特征,程序是否使用 1 MB 的内存来存储这些值?

换句话说,使用还有什么好处吗

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

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

最佳答案

至少,编译器会将多个相等的常量相互映射,因此所有类/实例将共享一个字节(或四个字节,或其他)。

根据常量值的用法(在引用它的代码中),编译器可能会将其作为“不必要的中间体”完全删除,因为它可以导出 IF 的结果s 或直接(静态)使用它的任何地方。

关于c++ - 静态 constexpr 成员存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38675373/

相关文章:

c++ - 在全局范围内访问私有(private)变量

c++ - printf或iostream如何指定点后的最大位数

c++ - C++11 的 LLVM 和 Clang 支持

c++ - std::vector 是否适合频繁调整大小?

c++ - c++中内存的使用

c++ - 将枚举数组转换为参数包

c++ - 在 C++ 中创建成员函数模板特化

html - 是否有用于 ASP.NET MVC3 View 的模板集合(HTML+CSS)?

c++ - 满足中断条件后继续循环

c++ - 我们可以在内存中的指定位置创建类类型的实例吗?