Почему ссылка с оператором = работает, а с конструктором - нет? - PullRequest
2 голосов
/ 11 марта 2019

Насколько я знаю, следующие утверждения совпадают:

A a1(1);
A a2=1;

Заголовок:

class A
{
   public:
      A(int num){}
};

Но при использовании ссылки он не скомпилируется

class B{
   private:
      int m_a = 0;
      int& m_b(m_a);

   public:
      B(int num):
      {
      }
};

получил ошибку компиляции, указав, что m_a не является именем типа но при этом с = работает:

class B
{
   private:
      int m_a = 0;
      int& m_b = m_a;

   public:
      B(int num):
      {
      }
};

1 Ответ

3 голосов
/ 11 марта 2019

Инициализация члена класса отличается от других форм инициализации.

Единственный поддерживаемый синтаксис для инициализации члена класса:

int& m_b = m_a;
int& m_b{m_a};

Подробнее об этом можно прочитать на https://en.cppreference.com/w/cpp/language/data_members#Member_initialization.

...