C++ explicit关键字的作用
explicit关键字只针带一个参数的构造函数有效
#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); //显式调用调用普通构造函数,okA b(a); //显式调用调用拷贝构造函数,okcout << "\n隐式转换:" << endl;A c=222; //隐式转换成调用普通构造函数,okA d=c; //隐式转换成调用拷贝构造函数,okreturn 0;
}
使用explicit关键字后
#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); //显式调用调用普通构造函数,okA b(a); //显式调用调用拷贝构造函数,ok//explicit构造函数只能被显式调用A c=222; //不能通过隐式转换,errorA d=c; //不能通过隐式转换,errorreturn 0;
}