Можно ли инициализировать статический объект-член const в классе в C ++? - PullRequest
1 голос
/ 03 ноября 2010

Можно ли инициализировать член статической константы в определении класса?Пожалуйста, см. Ниже для кода,

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 ]

4 голосов
/ 03 ноября 2010

Краткий ответ:

Нет, пока статический член не является константным и не имеет целочисленного или перечислимого типа.

Длинный ответ:

$ 9.4.2 / 4 - «Если статический член данных константного интеграла или константного перечисления тип, его объявление в классе определение может указать инициализатор констант, который должен быть интегральное постоянное выражение (5.19). В этом случае член может появиться в интегральные константные выражения. член по-прежнему должен быть определен в Область пространства имен, если она используется в программа и область имен определение не должно содержать инициализатор. "

3 голосов
/ 03 ноября 2010

Не для статического члена данных типа класса, как в вашем примере.

9.4.2 / 2:

Объявление статического члена данных в его определении классане является определением ... Определение статического члена данных должно появляться в области имен, включающей определение класса члена.

9.4.2 / 4:

Если член статических данных имеет константный интеграл или константный тип перечисления, его объявление в определении класса может указывать инициализатор константы, который должен быть выражением интегральной константы (5.19).В этом случае член может появляться в виде целочисленных константных выражений.Член по-прежнему должен быть определен в области имен, если он используется в программе, а определение области имен не должно содержать инициализатор.

...