• c++ explicit构造函数


    当类被实例化时,编译器会执行隐式转换的单实参构造函数,该构造函数接受的实参类型被转换成该构造函数所属类的对象。这种转换是自动的,不需要程序员进行强制类型转换。有些情况下,隐式转换是不必要的而且容易出错。

    eg:

    class Array{
       Array(int a=10); //单实参构造函数,会隐身转换实参类型
    private:
    int size;
    int *ptr;
    };
    
    Array::Array(int a){
     
            size = (s>0)?s:10;//验证数组大小
        ptr = new int[size];
        for(int i=0;i < size ; i++){
            ptr[i] = 0;
        }
    }
    
    int main(){
    
    Array a1(7);
    output(a1);
    output(3);//这里就会把3转换成一个数组对象,并且初始化为3个值
    }
    
    void output(const Array &arr){
      cout<<arr.getSize();
    }

    为了防止意外的将单实参构造函数用做转换构造函数 C++提供了关键字explicit,禁止通过转换构造函数进行隐转换。声明为explicit的构造函数不能用于隐式转换

    eg:

    class Array{

    explicit Array(int a =10);

    };

    值得注意的是关键字explicit只能用于数据成员或单个实参构造函数中

  • 相关阅读:
    关于MIME类型问题,浏览器请求到的资源是乱码
    关于vue切换用户,路由表不更新问题
    Flutter环境安装,ios真机调试
    vue使用trackingjs
    js的中文英文排序
    google无法播放mp4 chrome无法播放h264
    写在Blog前
    NOI2010Day1
    菜鸡KLC的中考游记
    ABC161 题解
  • 原文地址:https://www.cnblogs.com/ShowJoy/p/3621635.html
Copyright © 2020-2023  润新知