explicit 这个关键字用于修饰类的构造函数,防止类进行隐式转换。
关于这个关键字有两点:
只能用于修饰类的构造函数
一般用于类的单参数构造函数
看一段示例代码:
#include<iostream>
using namespace std;
class A
{
int i;
public:
A()
{
i=0;
}
A(int in): i(in) {}
};
int main()
{
A a = 4;
}
如果没使用explicit,由于存在隐式转换
A a = 4;
会被解释为:
A temp(4);
a = temp;
temp.~A();//当然,由于不同编译器的优化,真实的执行情况并不一样
会产生临时对象的开销。
但使用 explicit 主要是为了避免发生我们意想之外的隐式转换。
现在代码如下:
#include<iostream>
using namespace std;
class A
{
int i;
public:
A()
{
i=0;
}
explicit A(int in): i(in) {}
};
int main()
{
A a(4); //or A a = A(4);
}
–END–