如何在模板中初始化为零/ NULL

时间:2016-01-05 01:18:01

标签: c++ variable-initialization

在编写模板时,我想将我的变量初始化为一个值,该值用作零或null数据类型。如果我将它设置为0x00,它将作为任何类型的零/ NULL?

例如

这是模板声明

template <class T>
...
T A=0x00;

现在,如果我定义类型T =&gt;的实例std :: string上面的语句用作NULL

int”和“unsigned int”怎么样?两者都是“0”?

2 个答案:

答案 0 :(得分:12)

使用Value Initialization

{{1}}
  

值初始化的影响是:

     

1)如果T是具有至少一个用户提供的任何类型构造函数的类类型,则调用默认构造函数;
  (直到C ++ 11)

     

1)如果T是没有默认构造函数的类类型,或者是用户提供或删除的默认构造函数,则该对象是默认初始化的;
  (自C ++ 11起)

     

2)如果T是不带任何用户提供的构造函数的非联合类类型,则T的每个非静态数据成员和基类组件都是值初始化的;
  (直到C ++ 11)

     

2)如果T是具有默认构造函数的类类型,该构造函数既不是用户提供也不是删除(也就是说,它可能是具有隐式定义或默认默认构造函数的类),该对象是零初始化的并且如果它有一个非平凡的默认构造函数,则默认初始化;
  (自C ++ 11起)

     

3)如果T是数组类型,则数组的每个元素都是值初始化的;

     

4)否则,该对象被零初始化。

答案 1 :(得分:7)

您可以使用

T A = T(); // before C++11

T A{}; // C++11 and later

代表value initialization