构造函数在其初始化列表中调用同一个类的另一个构造函数是否有效?

时间:2017-05-15 16:12:28

标签: c++ constructor

#include <iostream>
#include <string>

class Data
{
    private:
    int day, month, year;
    public:
    Data() : Data(0,0,0) {};
    Data(int d, int m, int y) : day(d) , month(m), year(y) {}
    void print() { std::cout << day << " " << month << " "<< year << std::endl; }
};

int main()
{
    Data a;
    a.print(); //ok - output: 0,0,0 and no compiler errors
}

构造函数没有返回值,并且在创建对象时调用构造函数,这意味着可以初始化数据,所以当我从另一个构造函数调用构造函数时,这是否完全有效?

我还注意到Data() { Data(0,0,0); }; NOT 初始化当前的班级数据成员。

为什么Data() : Data(0,0,0) {};有效且Data() { Data(0,0,0); };没有?

1 个答案:

答案 0 :(得分:0)

执行表演是完美的做法:

Data() : Data(0,0,0) {};

您只是使用初始化程序列表进行调用。

原因

Data() {
    Data(0,0,0);
}

没有用,因为你所做的只是在构造函数中的堆栈上创建了一个“匿名”Data对象,一旦默认构造函数完成就会被破坏。