在c++中,有个特性,叫做隐式类型转换,在c语言中更多的是数据类型自下而上的一种隐式转换,而在c++中,更多的是指形参类型到该类类型 的一个隐式转换,这句话有些绕口,具体来看一个例子就能理解。
#include <iostream>
using namespace std;
class classA
{
public:
classA(int a=1,int b=1):m_a(a),m_b(b){}
private:
int m_a;
int m_b;
};
class classB
{
public:
explicit classB(int a=1,int b=1):m_a(a),m_b(b){}
private:
int m_a;
int m_b;
};
int main()
{
classA a1 = 2;
classA a2(5);
classB b1 = 4;
classA b2(5);
return 0;
}
编译报错如下:
可以看出,普通构造函数可以被隐式构造,而被explicit修饰的构造函数不支持隐式构造。