为什么编译器会抛出 "expected a type specifier"?

Why is compiler throwing "expected a type specifier"?

class A
{
private:
   int a;

public:
   int get_a()
   {
      return a;
   }
   A(int mode)
   {
      a = 0;
   }
   A()
   {
      a = 5;
   }
};

class B
{
public:
   A b(0);   
};

class C
{
   int c;

public:
   C(int mode)
   {
      c = 0;
   }
   C()
   {
      c = 1;
   }
};

int main()
{
   B bb;
   C cc(0);
   //cout << bb.b.get_a();
   system("pause");
   return 0;
}

如果我在 class B 中的 b 上使用 () 括号,如果我切换到 {},它会给出错误,一切都很好。我的问题是我不应该被允许这样做,因为在 cc in main 上它不会给出任何错误。并且我允许在初始化对象时使用 () 括号。

根据 C++ 20 标准(11.4 Class 成员),您可以使用大括号或等于初始化器来初始化 class

的数据成员
member-declarator:
    ...
    declarator brace-or-equal-initializeropt

所以你可以使用任何一种

class B
{
public:
   A b = 0;   
};

class B
{
public:
   A b { 0 };   
};

这样可以避免函数声明的歧义。