This question already has answers here:
In this specific case, is there a difference between using a member initializer list and assigning values in a constructor?

(12个答案)


7年前关闭。




我只是浏览Cprogramming.com上的随机页面,并注意到Constructors and Destructors教程/示例页面。他们使用以下方法定义构造函数:

class String
{
    private:
        char *str;
        int size;
    public:
        String() : str(NULL), size(0) { }  // <- This statement
        String(int size) : str(NULL), size(size) {  // <- And this one
            str = new char[size];
        }
}

我一直在使用带有魔术this指针的构造函数的老式定义:

String() {
    this->str = NULL;
    this->size = 0;
}
String(int size) {
    this->size = size;
    this->str = new char[size];
}

除了明显较小的代码(更少的行数)之外,第一个声明是否还有其他好处?

PS:自从我上次用C++编写东西以来已经有很多年了。

最佳答案

这些是constructor initialization lists,对于基本类型,您习惯的形式没有区别,它是基于赋值而不是初始化的。

但是,对于用户定义的类型,以下两者之间在性能(也许还有语义)方面可能有所不同:

  • 默认构造一个对象,然后为其分配值,然后添加
  • 直接使用该值对其进行初始化。

  • 另外,除了使用成员初始化列表来初始化它们之外,您别无选择地默认构造这些类型,也没有选择const和引用成员,这些必须立即初始化。

    关于c++ - 此构造函数定义的好处是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16884000/

    10-12 12:39
    查看更多