C++ explicit使用

记录在此,以便学习。

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

posted @ 2012-12-26 14:24  麦二蛋  阅读(110)  评论(0编辑  收藏  举报