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

6 c++ variable-initialization

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

例如

这是模板声明

template <class T>
...
T A=0x00;
Run Code Online (Sandbox Code Playgroud)

现在,如果我定义了一个T => std :: string类型的实例,那么上面的语句是NULL什么?

怎么样" int"和" unsigned int".两者都用作"0"?

Rem*_*eau 13

使用值初始化:

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

T A{}; // C++11 and later
Run Code Online (Sandbox Code Playgroud)

值初始化的效果是:

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

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

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

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

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

4)否则,对象是零初始化的.


Jar*_*d42 7

你可以用

T t{};
Run Code Online (Sandbox Code Playgroud)

用于值初始化.

  • @RemyLebeau [不是吗?](http://coliru.stacked-crooked.com/a/25fbc8eec3622322)即使编译器执行复制省略,我仍然认为复制ctor应该是可访问的. (2认同)