概述
一、需求引入
对于基本类型如 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() {
}
...
};
最后
以上就是天真画笔为你收集整理的类模板零值初始化的全部内容,希望文章能够帮你解决类模板零值初始化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复