隐式类型转换
“可以用单个形参来调用的构造函数定义了从 形参类型 到 该类类型 的一个隐式转换。”
这里应该注意的是, “可以用单个形参进行调用” 并不是指构造函数只能有一个形参,而是它可以有多个形参,但那些形参都是有默认实参的。
构造函数的调用方式
可以用单个形参来调用的构造函数有2种调用方式:隐式调用和显示调用
以如下类为例
class A{
public:
A(){
} //默认构造函数
A(int a):x(a){
}
private:
int x;
};
显示调用
A a(12); //初始化对象,显示调用构造函数
A b;
b=A(12); //强制类型转换,显示调用
###隐式调用
A a=12; //初始化对象,隐式调用构造函数
A b;
b=12; //隐式类型转换,隐式调用构造函数,这里会在之后详细描述
什么时候发生隐式类型转换
用=号进行初始化的时候,会对单个形参的构造函数进行隐式调用(没有被声明为explicit
),如果有对应形参类型的构造函数,则调用该构造函数完成初始化,这个过程被称为隐式类型转换。
如果构造函数被声明为explicit
,即在构造函数前面加上这个关键字,那么这个构造函数就不能被用于隐式类型转换。