c++中的explicit

来源:互联网 发布:c语言 头文件 编辑:程序博客网 时间:2024/04/30 22:17

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类型变量