我见过c ++类构造函数以两种不同的方式初始化成员,但效果相同。假设我们有一个简单的类:
class myClass
{
public:
myclass();//default constructor
private:
int a;
int b;
bool c;
};
案例1:
myClass::myClass()
/* Default constructor */
{
a=5;
b=10;
c=true;
//do more here
}
案例2:
myClass::myClass()
/* Default constructor */
:a(5),
b(10),
c(true)
{
//do more in here
}
编译后两者有什么区别?即使没有区别,是否有一种“首选”方式呢?
答案 0 :(得分:3)
第一个构造函数首先调用a,b,c
的默认构造函数(基本上将它们分配给随机值),然后将它们分配给提供的值。第二个构造函数直接调用a,b,c
的适当构造函数。
通常,第二个构造函数在成员初始化一次时效率更高,如果你有没有默认构造函数的成员,你必须以这种方式初始化它们或者使用C ++ 11中的非静态成员初始化程序。