关于类模板的构造函数重载[重复]

问题描述 投票:-4回答:1

这个问题在这里已有答案:

现在我只是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时,我没有传入任何参数,不应该没有参数被调用的构造函数?

先感谢您!

c++
1个回答
0
投票

变量的构造函数由其初始化确定。您的Test2构造函数上有一个初始化列表

 Test2():var2(x) {

所以你必须在那里查看Test2 :: var2的初始化方式。在初始化列表中,您传递整数x(未初始化为任何东西),因此它调用带有整数的Test1构造函数。

如果你没有在初始化列表中显式初始化var2(例如,如果你只是在构造函数体中分配它),那么它将被默认初始化并说“构造函数1”而不是2

© www.soinside.com 2019 - 2024. All rights reserved.