面试题:C++复杂模板类成员初始化顺序的深度剖析
请阅读以下复杂的C++模板代码:
```cpp
#include <iostream>
template <typename T>
class Inner {
public:
T data;
Inner(const T& value) : data(value) {
std::cout << "Inner constructor: data = " << data << std::endl;
}
};
template <typename U>
class Outer {
public:
Inner<int> inner1;
Inner<U> inner2;
U outerData;
Outer(const U& outerValue, const int& inner1Value, const U& inner2Value) : outerData(outerValue), inner2(inner2Value), inner1(inner1Value) {
std::cout << "Outer constructor: outerData = " << outerData << std::endl;
}
};
```
当执行`Outer<double> outer(3.14, 10, 20.2);`时,分析整个初始化过程,包括模板实例化顺序、各个类成员的初始化顺序以及可能出现的潜在问题(如果有)。