=默认构造函数可见性

And*_*sov 6 c++ default-constructor c++11

我有这样的代码

class A
{
    A() = default;
};

class B
{
    B(); 
};

B::B() = default;

int main()
{
    A a{}; //1
    A a1;  //2
    B b{}; //3
    B b1;  //4
}
Run Code Online (Sandbox Code Playgroud)

第2,3,4行按预期生成编译错误.但第1行有效!请解释

  1. 第1行和第2行之间的区别?在我看来,他们都应该使用默认构造函数并生成相同的错误.
  2. A和B类中构造函数之间的差异.