我是靠谱客的博主 天真画笔,最近开发中收集的这篇文章主要介绍类模板零值初始化,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、需求引入

对于基本类型如  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() {  

... 
}; 
 

最后

以上就是天真画笔为你收集整理的类模板零值初始化的全部内容,希望文章能够帮你解决类模板零值初始化所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部