explicit 关键字

如果一个类有只有一个参数的构造函数或者有多个参数但是除了第一个参数外所有的参数都有默认值的构造函数,c++允许一种特殊的声明类变量的方式。
在这种情况下,可以直接将一个对应于构造函数参数类型的数据直接赋值给类变量,编译器
在编译的时候会自动进行类型转换,将对应于构造函数参数类型的数据类型转换为类的对象。
如果在构造函数前加上explicit修饰词,则会禁止这种自动转换,在这种情况下,即使讲对应于构造函数参数类型的数据直接赋值给类变量,编译器也会报错。

explicit使用注意事项:
explicit 关键字只能用于类内部的构造函数声明上,explicit 关键字作用于单个参数的构造函数或者有多个参数但是除了第一个参数外所有的参数都有默认值的构造函数。
因为两个参数且没有默认值参数的构造函数没办法隐式的转换,即无法出现classtype classname = value;的情况(因为这样只能赋给一个值)。


 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);              //   调用函数   


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值