首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

初始化函数列表跟构造函数内赋值之区别

2012-11-05 
初始化函数列表和构造函数内赋值之区别初始化函数列表和构造函数内赋值之区别既然构造函数初始化列表和构

初始化函数列表和构造函数内赋值之区别
初始化函数列表和构造函数内赋值之区别

既然构造函数初始化列表和构造函数体内赋值都可以对成员变量赋值,那么二者有何区别,是不是二者等效呢?

一、若类的数据成员是静态的(const)和引用类型,必需用初始化列表

静态(const)的数据成员只能初始化而不能赋值,同样引用类型也是只可以被初始化,那么只有用初始化列表。

如:

//第一种方法:初始化列表template<class t>namedptr<t>::namedptr(const string& initname, t *initptr  ): name(initname), ptr(initptr){}//第二种方法是在构造函数体内赋值:template<class t>namedptr<t>::namedptr(const string& initname, t *initptr){name = initname;ptr = initptr;}


当用第二种方法初始化数据成员时会两次对string的成员函数的调用:一次是缺省构造函数,另一次是赋值。

而用第一种方法(初始化列表)只是一次调用缺省的构造函数,并不会调用赋值函数。会减少不必要的开支,当类相当复杂时,就会看出使用初始化列表的好处。

热点排行