是否可以在C ++中初始化类中的静态const成员对象?

时间:2010-11-03 03:21:19

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

是否可以在类定义中初始化静态常量成员?请参阅下面的代码,

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?
};

非常感谢。

2 个答案:

答案 0 :(得分:4)

简短回答:

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

答案很长:

  

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

答案 1 :(得分:3)

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

9.4.2 / 2:

  

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

9.4.2 / 4:

  

如果静态数据成员是const   整数或常数枚举类型,   它在课堂上的宣言   定义可以指定一个   恒定初始化器应该是一个   积分常数表达式(5.19)。   在这种情况下,该成员可以出现在   积分常数表达式。该   会员仍应在a。中定义   名称 - 空间范围,如果它在...中使用   程序和命名空间范围   定义不得包含   初始化程序。