【问题标题】:Is it possible to initialize static const member object in a class in C++?是否可以在 C++ 的类中初始化静态 const 成员对象?
【发布时间】:2010-11-03 03:21:19
【问题描述】:

是否可以在类定义中初始化静态常量成员?代码见下方,

class foo
{
  public:
    foo(int p) : m_p(p){}
    ~foo(){}

  private:
    int m_p;
};


class bar
{
   public:
     bar(){}
     ~bar(){}

   public:
     static const foo m_foo = foo( 2 ); //is this possible?
};

非常感谢。

【问题讨论】:

    标签: c++ static constants definition class-members


    【解决方案1】:

    简答:

    不,直到静态成员是 const 并且是整数或枚举类型。

    长答案:

    $9.4.2/4 - “如果一个静态数据成员是 const 积分或 const 枚举 类型,它在类中的声明 定义可以指定一个 常量初始化器,它应该是一个 积分常数表达式 (5.19)。 在这种情况下,该成员可以出现在 整数常量表达式。这 成员仍应定义在 命名空间范围(如果在 程序和命名空间范围 定义不应包含 初始化器。”

    【讨论】:

      【解决方案2】:

      不适用于类类型的静态数据成员,如您的示例。

      9.4.2/2:

      静态数据的声明 其类定义中的成员不是 定义... 的定义 静态数据成员应出现在 包含成员的命名空间范围 类定义。

      9.4.2/4:

      如果静态数据成员是 const 整数或 const 枚举类型, 它在类中的声明 定义可以指定一个 常量初始化器,它应该是一个 积分常数表达式 (5.19)。 在这种情况下,该成员可以出现在 整数常量表达式。这 成员仍应定义在 命名空间范围,如果它用于 程序和命名空间范围 定义不应包含 初始化器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-02
        • 2013-04-13
        • 2011-04-01
        • 1970-01-01
        • 2011-03-19
        相关资源
        最近更新 更多