A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  • 我们都知道explicit关键字用来防止其他类型隐式转换为累类型,比如
struct A{    A(double d):_d(d){}private:    double _d;  };A a = 5;//会调用构造函数执行隐式转换,用5初始化a,这种有时候会有风险
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
struct A{    explicit A(double d):_d(d){}    //只能显示初始化:A a(5);private:    double _d;};A a = 5;//用5初始化a,编译器报错。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 隐式转换函数
struct A{     explicit A(double d) :_d(d){}    //只能显示初始化:A a(5);    //可以隐式转换为double double d = a;    //返回顶层const 防止外部修改,返回引用& 防止值拷贝,提高效率(不一定,编译器可能优化)。    operator const double& (){                  return _d;    }private:    double _d;};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 函数对象——函数调用运算符重载
struct A{     explicit A(double d) :_d(d){}    //只能显示初始化:A a(5);    //可以隐式转换为double double d = a;    //返回顶层const 防止外部修改,返回引用& 防止值拷贝,提高效率(不一定,编译器可能优化,内置类型)    operator const double& (){                  return _d;    }    double operator ()(){// a() 可以当函数用,是个函数对象        return _d+1;    }private:    double _d;};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15


版权声明:本文为博主原创文章,未经博主允许不得转载。        https://blog.csdn.net/weixin_36292173/article/details/81115529


5 个回复

倒序浏览
回复 使用道具 举报
回复 使用道具 举报
优秀,奈斯
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马