7

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

例如

这是模板声明

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

现在,如果我定义 T => std::string 类型的实例,则上述语句用作NULL

int”和“ unsigned int”呢?对于两者,它都用作“0”?

4

2 回答 2

18

使用值初始化

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

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

值初始化的效果是:

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

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

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

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

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

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

于 2016-01-05T01:21:27.313 回答
7

您可以使用

T t{};

用于值初始化

于 2016-01-05T01:21:17.063 回答