0
#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); };
がそうでないのですか?
[委任コンストラクタ](http://en.cppreference.com/w/cpp/language/initializer_list#Delegating_constructor)を参照してください。 2番目の例では、名前のついていないtempをスタックに作成して破棄します。それは建設とは関係がありません。 –