C++11/14中的静态常量和constexpr成员字段有什么区别?

9
这些成员变量有什么不同:
struct my_class {
    static const int i = 0;
    static constexpr int j = 0;
};

如果我的理解是正确的,我可以使用 i j 作为编译时常量。也就是说,std::array<int, my_class::i>std::array<int,my_class::j>都应该可行。

5
可能是Difference between constexpr and const的重复问题。 - Humam Helfawi
阅读了那个问题后,我仍然无法弄清楚我的问题的答案 :-) - amin
@HumamHelfawi,我想了解constexpr是静态的时有什么不同。这有点不同。 - amin
1个回答

8

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

进行lvalue-to-rvalue转换(4.1),除非它应用于

  • 指向已初始化为常量表达式或完整的非易失性const对象的整数或枚举类型的非易失性glvalue,或[…]
  • 引用定义为constexpr的非易失性对象或其非可变子对象的非易失性glvalue,或[…]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接