4

假设我有以下模板

template <typename T>
class{
   T t;
};

现在,我想添加一个构造函数,用它的类型的默认值初始化 t。也就是说,对于数值类型,t 应该用 初始化0,对于指针,t 应该用 初始化nullptr。最后,可能还有其他类型,例如结构。在这里,一个好的初始化将是默认构造函数(无论如何都会调用它,所以我不必在这里做任何事情)。

总之,我正在寻找这样的东西:

template<typename T>
class X{
    T t;
    X() : t(default_value<T>::value);
}

正如我想象的语法所指出的那样,我认为可以使用具有不同专业化的某种模板来承载默认值。但是如何处理结构和类呢?由于我已经指定t(...),默认构造函数不再是一个选项。

4

1 回答 1

13

你可以做

X() : t() { }

和/或 C++11 中的这个

X() : t { } { } // see Johannes Schaub's comments about this

这会将初始化(或者它是默认初始化?)值初始化t为它的类型的默认值,无论是内置的 0,数组的一系列(值?默认)初始化,还是使用用户的默认构造函数-定义的类型。

于 2012-09-04T15:53:59.850 回答