在编写模板时,我想将我的变量初始化为一个值,该值用作零或null数据类型。如果我将它设置为0x00,它将作为任何类型的零/ NULL?
例如
这是模板声明
template <class T>
...
T A=0x00;
现在,如果我定义类型T =&gt;的实例std :: string上面的语句用作NULL
?
“int
”和“unsigned int
”怎么样?两者都是“0”?
答案 0 :(得分:12)
{{1}}
值初始化的影响是:
1)如果T是具有至少一个用户提供的任何类型构造函数的类类型,则调用默认构造函数;
(直到C ++ 11)1)如果T是没有默认构造函数的类类型,或者是用户提供或删除的默认构造函数,则该对象是默认初始化的;
(自C ++ 11起)2)如果T是不带任何用户提供的构造函数的非联合类类型,则T的每个非静态数据成员和基类组件都是值初始化的;
(直到C ++ 11)2)如果T是具有默认构造函数的类类型,该构造函数既不是用户提供也不是删除(也就是说,它可能是具有隐式定义或默认默认构造函数的类),该对象是零初始化的并且如果它有一个非平凡的默认构造函数,则默认初始化;
(自C ++ 11起)3)如果T是数组类型,则数组的每个元素都是值初始化的;
4)否则,该对象被零初始化。
答案 1 :(得分:7)