类模板零值初始化

一、需求引入

对于基本类型如  int、double、pointer   type(指针类型)来说,并没有一个  default 构造函数将它  们初始化为有意义的值。任何一个未初始化的区域变量(local variable),其值都是未定义的:  
void foo() { 
int x; // x  的值未有定义 
int* ptr; // ptr  指向某处(而不是哪儿都不指向) 

 
你可能在   template  程序代码中声明某个变量,并且想令这个变量被初始化为其默认值;但是当变  数是个内建类型(built-in type)时,你无法确保它被正确初始化: 
template <typename T> 
void foo() { 
T x; //  如果  T  是内建类型,则  x  值未有定义 
}


二、解决思路

为解决这个问题,你可以在声明内建类型的变量时,明确调用其  default 构造函数,使其值为零 (对 bool  类型而言则是  false)。也就是说  int()导致  0  值。这样一来你就可以确保内建类型的变量有正确初值: 
template <typename T> 
void foo() { 
T x = T();   //  如果  T  是内建类型,则  x  被初始化为  0  或  false 

 
Class template  的各个成员,其类型有可能被参数化。为确保初始化这样的成员,你必须定义一 个构造函数,在其「成员初值列」(member initialization list)中对每个成员进行初始化: 
template <typename T> 

class MyClass { 

private: 
T x; 


public: 

//这么做可以确保:即使  T  为内建类型,x 也能被初始化。
MyClass() : x() {  

... 
}; 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值