我对 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"
?