为什么用operator =引用有效但用构造函数引用无效?

时间:2019-03-11 18:30:26

标签: c++ c++11 reference variable-initialization

据我所知,以下陈述是相同的:

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 个答案:

答案 0 :(得分:3)

类内成员初始化与其他形式的初始化不同。

类内成员初始化唯一受支持的语法是:

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

您可以在https://en.cppreference.com/w/cpp/language/data_members#Member_initialization上了解更多信息。