让构造函数在其初始化列表中调用同一类的另一个构造函数是否有效
Is it valid to have a constructor call another constructor of the same class in its initialization list?
#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) {};
有效而Data() { Data(0,0,0); };
无效?
执行是完美的练习:
Data() : Data(0,0,0) {};
您只需使用初始值设定项列表进行调用。
原因
Data() {
Data(0,0,0);
}
没有工作是因为您所做的只是在构造函数内的堆栈上创建了一个"匿名"Data
对象,一旦默认构造函数完成,该对象将被破坏。
相关文章:
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 在 c++ 中将对象设置为等于同一类的构造函数是否有效?
- 将1D或2D向量传递给同一类的构造函数
- 让构造函数在其初始化列表中调用同一类的另一个构造函数是否有效
- 在C++中,类是否可以包含指向构造函数中初始化的同一类的指针?
- 为什么一个非平凡的成员需要为同一类中的匿名联合定义构造函数
- 如何在类构造函数内部对同一类的成员函数启动pthread
- 同一类的各种明确构造函数
- 从同一类的另一个构造函数调用构造函数
- 为什么在同一类中使用不同的(共享_ptr和正常)指针构造函数,我会得到不同的结果
- 用参数初始化另一类构造函数中的对象
- 一个嵌入在另一类 构造函数中的一个类的对象数组
- 不能从同一类的另一个构造函数调用具有所有默认参数的显式构造函数
- C++类构造函数使用指向同一类对象的指针
- C++是一个类的默认构造函数,调用另一类的另一个默认构造函数
- C++14从不同的构造函数(同一类)调用一个[具有不同参数]的构造函数
- 调用同一类中的另一个构造函数
- c++在同一类的另一个构造函数中调用构造函数
- 同一类的 C++ 扩展构造函数(无继承)
- 将类构造函数重载放在同一类的另一个重载中