我们都知道类成员变量的初始化顺序取决于它们的声明顺序。当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)中,结果是这样。
也许这个问题似乎没有意义,但是我真的很想知道这种现象的原因。请提前帮助我!