explicit关键字只针带一个参数的构造函数有效
cpp
#include <iostream>
using namespace std;
class A
{
public:
A(int temp) //普通构造函数
{
a = temp;
cout << "普通构造函数: a= " << a << endl;
}
A(const A &temp) //拷贝构造函数
{
a = temp.a;
cout << "拷贝构造函数: a = " << a << endl;
}
private:
int a;
};
int main()
{
cout << "显示调用:" << endl;
A a(250); //显式调用调用普通构造函数,ok
A b(a); //显式调用调用拷贝构造函数,ok
cout << "\n隐式转换:" << endl;
A c=222; //隐式转换成调用普通构造函数,ok
A d=c; //隐式转换成调用拷贝构造函数,ok
return 0;
}
使用explicit关键字后
cpp
#include <iostream>
using namespace std;
class A
{
public:
explicit A(int temp) //普通构造函数,被声明为explicit(显式)
{
a = temp;
cout << "普通构造函数: a= " << a << endl;
}
A(const A &temp) //拷贝构造函数,被声明为explicit(显式)
{
a = temp.a;
cout << "拷贝构造函数: a = " << a << endl;
}
private:
int a;
};
int main()
{
cout << "显示调用:" << endl;
A a(250); //显式调用调用普通构造函数,ok
A b(a); //显式调用调用拷贝构造函数,ok
//explicit构造函数只能被显式调用
A c=222; //不能通过隐式转换,error
A d=c; //不能通过隐式转换,error
return 0;
}