C++ 11/14中的static const vs constexpr成员字段?

ami*_*min 9 c++ templates constexpr c++11 c++14

这些成员变量之间有什么区别:

struct my_class {
    static const int i = 0;
    static constexpr int j = 0;
};
Run Code Online (Sandbox Code Playgroud)

如果我的理解是正确的,我可以使用它们ij编译时常量.也就是说,无论是std::array<int, my_class::i>std::array<int,my_class::j>应该工作.

Col*_*mbo 8

积分或枚举类型的成员没有区别(如您的示例中所示).对于所有其他类型,常量表达式需要constexpr:

除非适用,否则左值到右值的转换(4.1)

  • 一个非整数或枚举类型的非易失性glvalue,它引用一个完整的非易失性const对象,具有前面的初始化,用常量表达式初始化,或者[...]
  • 一个非易失性glvalue,它引用一个非易失性对象constexpr,或者引用这样一个对象的不可变子对象,或者[...]