这个问题在这里已有答案:
现在我只是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时,我没有传入任何参数,不应该没有参数被调用的构造函数?
先感谢您!
变量的构造函数由其初始化确定。您的Test2构造函数上有一个初始化列表
Test2():var2(x) {
所以你必须在那里查看Test2 :: var2的初始化方式。在初始化列表中,您传递整数x
(未初始化为任何东西),因此它调用带有整数的Test1构造函数。
如果你没有在初始化列表中显式初始化var2(例如,如果你只是在构造函数体中分配它),那么它将被默认初始化并说“构造函数1”而不是2