如果类成员变量A依赖于类成员变量B,可以在B之前初始化A吗?

时间:2019-11-14 03:44:46

标签: c++

我们都知道类成员变量的初始化顺序取决于它们的声明顺序。当A在B之前声明但A依赖于B时会发生什么?我做了一个实验。 >

#include <iostream>
using namespace std;
class TestClass1
{
public:
    TestClass1()
    {
        cout << "TestClass1()" << endl;
    }
    TestClass1(const TestClass1&)
    {
        cout << "TestClass1(const TestClass1&)" << endl;
    }
    TestClass1(int i)
    {
        cout << "TestClass1(int i) " << i << " " << endl;
    }
};

class TestClass2
{
public:
    TestClass2() { cout << "TestClass2()" << endl; }
    TestClass2(const TestClass2&) { cout << "TestClass2(const TestClass2&)" << endl; }
    int fun() { return 2; }
};

class TestClass3
{
public:
    TestClass3(TestClass2& tc2) :m_tc2(tc2), m_tc1(m_tc2.fun()) {};
private:
    TestClass1 m_tc1;
    TestClass2 m_tc2;
};

int main()
{
    TestClass2 tc2;
    cout << "................................................\n";
    TestClass3 tc3(tc2);
    return 0;
}

如您所见,在TestClass3中,我使用TestClass2 :: fun()的返回值构造m_tc1。在我的选择中,尽管我在m_tc2之前声明了m_tc1,但应在m_tc1之前初始化m_tc2,因为m_tc1无法在不存在m_tc2的情况下进行构造。但是事实恰恰相反。在vs2019(v142)中,结果是这样。 enter image description here

也许这个问题似乎没有意义,但是我真的很想知道这种现象的原因。请提前帮助我!

0 个答案:

没有答案