在这种特定情况下,使用成员初始值设定项列表和在构造函数中赋值之间有区别吗?

2024-03-23

在内部和生成的代码方面,以下之间是否存在真正的区别:

MyClass::MyClass(): _capacity(15), _data(NULL), _len(0)
{
}

and

MyClass::MyClass()
{
  _capacity=15;
  _data=NULL;
  _len=0
}

谢谢...


您需要使用初始化列表来初始化常量成员、引用和基类

当您需要初始化常量成员、引用并将参数传递给基类构造函数时,如注释中所述,您需要使用初始化列表。

struct aa
{
    int i;
    const int ci;       // constant member

    aa() : i(0) {} // will fail, constant member not initialized
};

struct aa
{
    int i;
    const int ci;

    aa() : i(0) { ci = 3;} // will fail, ci is constant
};

struct aa
{
    int i;
    const int ci;

    aa() : i(0), ci(3) {} // works
};

示例(非详尽)类/结构包含参考:

struct bb {};

struct aa
{
    bb& rb;
    aa(bb& b ) : rb(b) {}
};

// usage:

bb b;
aa a(b);

初始化需要参数的基类的示例(例如没有默认构造函数):

struct bb {};

struct dd
{
    char c;
    dd(char x) : c(x) {}
};

struct aa : dd
{
    bb& rb;
    aa(bb& b ) : dd('a'), rb(b) {}
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在这种特定情况下,使用成员初始值设定项列表和在构造函数中赋值之间有区别吗? 的相关文章

随机推荐