为什么复合 class 中默认构造函数的成员初始化列表不调用成员对象构造函数?

Why does a Member initialized list for a default constructor in a composite class not call the member object constructor?

复合中默认构造函数的成员初始化列表class不调用成员对象构造函数。

#include <iostream>
struct test{
    test(){
        std::cout << "defualt is called" << std::endl;
    }
    test(int num){
        std::cout <<"parameter is called" << std::endl;
    }
};
struct test2{
    test a;
    test2():a(21){}
};
int main(){

    test2 b();
}

没有输出, 但是如果我将复合 class 中的默认构造函数更改为参数化构造函数,那么它会按预期工作

#include <iostream>
struct test{
    test(){
        std::cout << "defualt is called" << std::endl;
    }
    test(int num){
        std::cout <<"parameter is called" << std::endl;
    }
};
struct test2{
    test a;
    test2(int num):a(21){}
};
int main(){
    test2 b(4);
}

输出为:参数被调用

test2 b();是函数声明,不是变量声明。它声明了一个名为 b 的函数,该函数不带任何参数,并且 returns 和 test2。以下任一项都会产生一个使用默认构造函数的 test2 变量:

int main(){
    test2 b; // No parentheses at all
}
int main(){
    test2 b{}; // Curly braces instead of parentheses
}