c++中的explicit 关键字是什么意思?

时间:2022-06-07 00:42:52
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类型变量