【发布时间】:2016-04-05 10:07:54
【问题描述】:
考虑以下代码:
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<std::array<double, 3>> c();
标签: c++ constructor initialization c++14 default-constructor