现在我对C ++真的很陌生,目前我在下面有一段代码:
#include <iostream>
using namespace std;
template<typename T>
class Test1
{
public:
Test1():var1(1) {
cout << "Constructor1" << endl;
}
Test1(T a):var1(a) {
cout << "Constructor2" << endl;
}
private:
int var1;
};
template<typename T>
class Test2
{
public:
Test2():var2(x) {
cout << "Constructor3" << endl;
};
private:
int x;
Test1<int> var2;
};
int main()
{
Test2<int> var3;
return 0;
}
输出将只是
Constructor2
Constructor3
我想知道为什么将调用构造函数2而不是构造函数1,因为在类Test2中,当创建对象var2时,我没有传递任何参数,不应该调用没有参数的构造函数吗?
提前谢谢!
答案 0 :(得分:0)
变量的构造函数由其初始化确定。您的Test2构造函数上有一个初始化列表
Test2():var2(x) {
所以您必须去那里看看如何初始化Test2 :: var2。在初始化列表中,您要传递整数x
(未初始化为任何东西),因此它将调用采用整数的Test1构造函数。
如果您没有在初始化器列表中显式初始化var2(例如,如果您只是在构造函数主体中对其进行赋值),则它将被默认初始化并说“ constructor 1”而不是2