explicit,和构造函数一起使用.
explicit
constructor指明构造函数只能显示使用,目的是为了防止不必要的隐式转化.
举个例子:
有这样一段代码:
class
A
{
public:
A(int);
private:
int
num;
};
int
Test(const
A&)
//
一个应用函数
{
...
}
Test(2);
//
正确
过程是这样的:
编译器知道传的值是int而函数需要的是A类型,但它也同时知道调用A的构造函数将int转换成一个合适的A,所以才有上面成功的调用.换句话说,编译器处理这个调用时的情形类似下面这样:
const
A
temp(2);
//
从2产生一个临时A对象
Test(temp);
//
调用函数
如果代码写成如下样子:
class
A
{
public:
explicit
A(int);
private:
int
num;
};
int
Test(const
A&)
//
一个应用函数
{
...
}
Test(2);
//
失败,不能通过隐式类型转换将int类型变量构造成成A类型变量