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

C++构造函数初始化列表,该怎么解决

2012-07-04 
C++构造函数初始化列表我想问一下这两种方式有什么不同,及使用初始化列表与不使用初始化列表有什么区别?C/

C++构造函数初始化列表
我想问一下这两种方式有什么不同,及使用初始化列表与不使用初始化列表有什么区别?

C/C++ code
class base{public:    base();    base(int n);    ~base();private:    int num;};base::base(int n):num(n){}  //使用初始化列表base::base(int n)           //不使用初始化列表{    num(n);}



[解决办法]
初始化列表是初始化,而括号里可以看为赋值
对于POD来说差不多,但对于某种class类型,有效率的差别
[解决办法]
如定义一个类的const成员变量,就需要在初始化列表中做初始化。
[解决办法]
1,base::base(int n):num(n){} //使用初始化列表
// 初始化,
,2,base::base(int n) //不使用初始化列表
{
num(n);//这个是赋值
}

区别在于的是:有可能你先使用了该类的属性num,而导致了未定义,比如第二种
base::base(int n) :fun(num)
建议是采用第一种类来初始化



[解决办法]
对于构造函数的初始化,可以看成是分两步进行的,第一步是在初始化列表中进行初始化,如果没有显式的在初始化列表中进行初始化,则采用默认的形式进行初始化,类类型采用默认构造函数进行初始化,其他的一般没有初始化值。第二步才进行函数体中的赋值。对于有些类型的变量必须要在初始化列表中进行初始化,比如像没有默认构造函数的类,还有上面的const变量等,如果不在初始化列表中进行初始化就会出错。
[解决办法]
参考:
初始化列表问题

热点排行