C++ のコンストラクターについていくつか質問があります。各質問 ((1) から (4) まで) について、動作が標準に関して完全に定義されているかどうかを知りたいです。
A) 最初のものはメンバーの初期化についてです:
class Class
{
public:
Class()
: _x(0)
, _y(_x)
, _z(_y) // <- (1) Can I initialize a member with other members ?
{
;
}
protected:
int _x;
int _y;
int _z;
};
B) コンパイラによって各クラスに追加された関数は何ですか?
template<typename T> class Class
{
public:
template<typename T0>
Class(const Class<T0>& other)
{
std::cout<<"My copy constructor"<<std::endl;
_x = other._x;
}
template<typename T0 = T>
Class (const T0 var = 0)
{
std::cout<<"My normal constructor"<<std::endl;
_x = var;
}
public:
T _x;
};
// (2) Are
// Class(const Class<T>& other)
// AND
// inline Class<T>& operator=(const Class<T>& other)
// the only functions automatically added by the compiler ?
例として、私が呼び出すと:
Class<int> a;
Class<int> b(a); // <- Will not write "My copy constructor"
Class<double> c(a); // <- Will write "My copy constructor"
(3) この動作は、標準に従って完全に正常ですか?
(4) 空のコンストラクターが自動的に追加されず、それClass<int> x;
が書き込みを行うという保証はあります"My normal constructor"
か?