以下c ++构造函数之间有什么区别?

时间:2013-10-03 02:14:46

标签: c++ class constructor

我见过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
}

编译后两者有什么区别?即使没有区别,是否有一种“首选”方式呢?

1 个答案:

答案 0 :(得分:3)

第一个构造函数首先调用a,b,c的默认构造函数(基本上将它们分配给随机值),然后将它们分配给提供的值。第二个构造函数直接调用a,b,c的适当构造函数。

通常,第二个构造函数在成员初始化一次时效率更高,如果你有没有默认构造函数的成员,你必须以这种方式初始化它们或者使用C ++ 11中的非静态成员初始化程序。