在C ++模板中,如何构造未知类型的元素(T)?

时间:2013-04-23 18:37:07

标签: c++ templates construct

我遇到了一个模板问题,你必须创建一个T类型的元素,然后构造它然后将它添加到数组中。

我不确定如何构建构造部分。

我们只是做

T element;

T element = T();

1 个答案:

答案 0 :(得分:2)

如果您的T属于班级类型,我会说这个版本:

T element;

只要元素是默认可构造的(并且如果不是,则上述方法都不起作用)是优选的。使用第二个版本:

T element = T();

意味着创建一个T类型的临时对象,element可以从中复制构造或移动构造。此外,如果您的类型不可移动,则无法编译。

另一方面,当元素是基本类型时,T element = T()将提供值初始化。因此,例如,当T = int时,element将被初始化为零,而在第一种情况下,它将是未初始化的。

在C ++ 11中,最好的方法(在评论中由mfontanini建议)是使用直接初始化和统一的初始化语法(以防止编译器将其解析为函数声明):

T element{};

这将为您提供类类型的默认构造和基本类型的值初始化。