【问题标题】:static const vs constexpr member fields in C++11/14?C++ 11/14 中的静态 const 与 constexpr 成员字段?
【发布时间】:2016-03-29 10:48:44
【问题描述】:

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

struct my_class {
    static const int i = 0;
    static constexpr int j = 0;
};

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

【问题讨论】:

  • 读完那个问题后,我还是想不出我的问题的答案:-)
  • @HumamHelfawi 我想知道当 constexpr 为静态时它有什么不同。这有点不同。

标签: c++ templates c++11 c++14 constexpr


【解决方案1】:

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

左值到右值的转换 (4.1),除非它应用于

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多