当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在模板中初始化为零/NULL》经验,为你挑选了2个好方法。

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

例如

这是模板声明

template 
...
T A=0x00;

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

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



1> Remy Lebeau..:

使用值初始化:

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

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

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



2> Jarod42..:

你可以用

T t{};

用于值初始化.


@RemyLebeau [不是吗?](http://coliru.stacked-crooked.com/a/25fbc8eec3622322)即使编译器执行复制省略,我仍然认为复制ctor应该是可访问的.
推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有