考慮下面的代碼:空默認構造函數和成員初始化
template <class T>
struct myclass
{
// Select only one constructor in the following
myclass() = default; // 0
myclass() {}; // 1
myclass(): i{}, ptr{}, var{}, arr{}, vec{}, str{} {} // 2
myclass(): i(), ptr(), var(), arr(), vec(), str() {} // 3
// Data members
int i;
T* ptr;
T var;
std::array<int, 3> arr;
std::vector<T> vec;
std::string str;
};
而且其採用:
myclass<std::array<double, 3>> a;
myclass<std::array<double, 3>> b{};
myclass<std::array<double, 3>> c();
auto d = myclass<std::array<double, 3>>{};
auto e = myclass<std::array<double, 3>>();
所以在總,混合選擇構造/構建方法,我們有4 * 5 = 20個案例:a0, a1, a2, a3, b0, b1, b2, b3, ..., e3
。我的問題是:
導致初始化成員(i
設置爲零,ptr
設置爲nullptr
,arr
用零填充),導致未初始化的成員什麼情況下,什麼情況下?
最棘手的解析被初始化'MyClass的<性病::陣列> C();' –
101010