C++中的explicit

C++中的explicit

一. C++中构造函数的隐式类型转换

  1. 隐式类型转换规则,遵循不损失精度的原则
    请添加图片描述
  2. 当类类型遇到隐式类型转换的时候,会有一些意外情况产生,比如初始化一个类的对象的时候使用 = 的时候,为了避免产生这样的隐式类型转换出现了关键字explicit
    ClassA a = value;
    

二. explicit 关键字的用法

  1. 在构造函数声明的时候使用,比如
    class Test
    {
    	int i ;
    public:
        explicit Test(int i=0):i(i){};
    };
    
  2. 我们观察一下加了explicit之后定义对象过程中的变化
    Test t1(1);   //没有问题
    Test t2 = 11; //报错!!! error: no viable conversion from 'int' to 'Test' 
    Test t3 = t2; //没有问题 因为执行的是拷贝构造函数Test(Test& t),这个函数是没有explicit声明的
    
  3. 这个现象表示,执行Test构造函数的时候只能显性传值,不能用赋值符号的方式传递构造函数的参数
  4. 那有没有人问为什么 Test t3 = t2; 就可以,这里不是用赋值运算符了吗?这里调用的是拷贝赋值函数,不是我们加explicit声明的构造函数,所以这里是可以执行的。同样的如果对拷贝构造函数也加了explicit声明,Test t3 = t2; 这句也会报语法错误,只能通过Test t3(t2);这种方式拷贝构造
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值