Как делегирование конструктора взаимодействует с инициализацией нестатического элемента данных? - PullRequest
1 голос
/ 03 октября 2011

Скажем, у меня есть такой код:

class Foo
{
public:
  Foo(int v) : value(v) {}
  Foo() : Foo(42) {}
private:
  int value = 666;
};

Установлен ли ctor по умолчанию value на 42 или 666?Думаю, я бы надеялся на 42, поскольку это явный вызов, но я мог бы представить и другой путь.

Как насчет наследования?

class Base
{
public:
  Base() { }
  virtual ~Base() { }
  virtual int f() = 0;
};

class Bar : public Base
{
public:
  Bar(int _i) : Base(), i(_i) { }
  Bar() : Bar(-1) { }
  virtual ~Bar() { }
  virtual int f() { }
private:
  int i = 777;
};

Опять же, я надеюсь на i == -1.

Спасибо.

1 Ответ

3 голосов
/ 03 октября 2011

Инициализатор членов тела в классе - это просто значение по умолчанию. Если список инициализатора члена конструктора тоже инициализирует член, он всегда имеет приоритет.

Это указано в 12.6.2p9 в спецификации C ++ 11.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...