为什么复合 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
}
复合中默认构造函数的成员初始化列表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
}