C++ 让一个构造函数在其初始化列表中调用同一类的另一个构造函数是否有效? #包括 #包括 类数据 { 私人: 整数日、月、年; 公众: Data():数据(0,0,0){}; 数据(intd,intm,inty):日(d),月(m),年(y){ void print(){std::cout

C++ 让一个构造函数在其初始化列表中调用同一类的另一个构造函数是否有效? #包括 #包括 类数据 { 私人: 整数日、月、年; 公众: Data():数据(0,0,0){}; 数据(intd,intm,inty):日(d),月(m),年(y){ void print(){std::cout,c++,constructor,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 &l

执行以下操作是最佳实践:

#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) {};
没有工作是因为您所做的只是在构造函数内的堆栈上创建了一个“匿名”
数据
对象,该对象将在默认构造函数完成后立即销毁。

请检查。第二个示例只是在堆栈上创建一个未命名的临时对象并将其销毁。这与构造无关。
Data() {
    Data(0,0,0);
}