在编写模板时,我想将我的变量初始化为一个值,该值用作零或null数据类型.如果我将其设置为0x00,它将作为任何类型的零/ NULL?
例如
这是模板声明
template... T A=0x00;
现在,如果我定义了一个T => std :: string类型的实例,那么上面的语句是NULL
什么?
怎么样" int
"和" unsigned int
".两者都用作"0"?
使用值初始化:
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)否则,对象是零初始化的.
你可以用
T t{};
用于值初始化.