对用户自定义类型的对象而言,初始化由构造函数执行。
所谓default构造函数时一个可悲调用而不带任何实参者,默认构造函数可由类型隐式提供。
class A{
public:
A(); //default构造函数
};
class B{
public:
explicit B(int X = 0,bool b = true); //default构造函数
};
class C{
public:
explicit C(int X); //不是default构造函数
};
default构造函数要不没有参数,要不就是每个参数都有缺省值。
上述的classes B和C的构造函数都被声明为explicit,这可阻止它们被用来执行隐式类型转换(implicit type conversions),但它们仍可被用来进行显式类型转换(explicit type conversions)
例子:
void FUNC(B bObject); //函数,接收一个类型为B的对象
B bObject1; //一个类型为B的对象
FUNC(bObject1); //传递一个B 给FUNC函数
B bObject2; //根据int28建立一个B
FUNC(28); //错误FUNC应该接收一个B,不是int,而
//int至B之间没有隐式转换。
/*当没声明为explicit 禁止隐式类型转换时
这里28传递给FUNC函数,并临时调用构造器生成一个临时实例来执行这个FUNC函数。
最佳操作:需要转换时使用显式转换。
*/
FUNC(B(28)); // 使用B构造函数将int显式转换