C++构造函数初始化列表,该怎么解决
C++构造函数初始化列表我想问一下这两种方式有什么不同,及使用初始化列表与不使用初始化列表有什么区别?C/
C++构造函数初始化列表
我想问一下这两种方式有什么不同,及使用初始化列表与不使用初始化列表有什么区别?
C/C++ codeclass 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变量等,如果不在初始化列表中进行初始化就会出错。
[解决办法]参考:
初始化列表问题