当前位置: 首页 > news >正文

仿做网站网站网站行高

仿做网站网站,网站行高,学生个人网页制作成品代码,什么是可信网站认证目录 一、前言 二、explicit关键字是什么#xff1f; 三、构造函数还具有类型转换的作用 #x1f34e;单参构造函数 ✨引出 explicit 关键字 #x1f34d;多参构造函数 ✨为什么需要explicit关键字#xff1f; ✨怎么使用explicit关键字#xff1f; 四、总结 五…目录 一、前言 二、explicit关键字是什么  三、构造函数还具有类型转换的作用 单参构造函数 ✨引出 explicit 关键字  多参构造函数 ✨为什么需要explicit关键字  ✨怎么使用explicit关键字 四、总结  五、共勉 一、前言 在我们自己平时写 C 代码的时候较少会用到 explicit关键字 。但是在C相关的标准类库中看到explicit关键字的频率还是很高的。既然出现的频率这么高那么我们就来看看explicit关键字的作用到底是干什么的。 二、explicit关键字是什么  explicit是C中的一个关键字它用来修饰只有一个参数的类构造函数以表明该构造函数是显式的而非隐式的。当使用explicit修饰构造函数时它将禁止类对象之间的隐式转换以及禁止隐式调用拷贝构造函数。         这能这么说大家不太好理解既然解释中提到了 类的构造函数  那么下面我将从构造函数中详细的给大家讲解explicit其中的含义。 三、构造函数还具有类型转换的作用 在理解 explicit 关键字 之前我们必须要了解构造函数的类型转换作用以便于我们更好的理解 explicit 关键字 如果有不懂构造函数的老铁可以来看看这篇文章构造函数 单参构造函数 还是来说说老朋友日期类我们通过下面这个日期类进行讲解 class Date { public: // 构造函数Date(int year):_year(year) // 初始化列表{}private:int _year;int _month 3;int _day 31; };对于下面的 d1 很清楚一定是调用了有参构造进行初始化不过对于 d2 来说也是一种构造方式 int main() {// d1 和 d2 都会调用构造函数Date d1(2022); Date d2 2023;return 0; }我们依旧通过调试来看就会非常清晰这种 【Date d2 2023】 写法也会去调用构造函数 此时大家可能会产生疑问这种构造方式从来没有见过为什么 【Date d2 2023】会调用 构造函数呢  其实这都是因为有【隐式类型转换】的存在下面我将从一个简单的例子来为大家讲解。 在引用详解我有提到过【隐式类型转换】这个概念像下面将一个int类型的数值赋值给到一个double类型的数据此时就会产生一个隐式类型转换 int i 1; double d i;对于类型转换而言这里并不是将值直接赋值给到左边的对象而是在中间呢会产生一个临时变量例如右边的这个 i 会先去构造一个临时变量这个临时变量的类型是 [double] 。把它里面的值初始化为 1然后再通过这个临时对象进行拷贝构造给d这就是编译器会做的一件事 那对于这个 d2 其实也是一样2023会先去构造一个临时对象这个临时对象的类型是[Date]把它里面的year初始化为2023然后再通过这个临时对象进行拷贝构造给到d2 小蛋不是说构造函数有初始化列表吗拷贝构造怎么去初始化呢 //拷贝构造 Date(const Date d):_year(d._year),_month(d._month),_day(d._day) {}同学别忘了【拷贝构造】也是属于构造函数的一种哦也是会有初始化列表的 刚才说到了中间会产生一个临时对象而且会调用构造 拷贝构造那此时我们在Date类中写一个拷贝构造函数调试再去看看会不会去进行调用 很明显没有我在进入Date类后一直在按F11但是却进不到拷贝构造中这是为什么呢 原因其实在于编译器在这里地方做了一个优化将【构造 拷贝构造】优化成了【一个构造】因为编译器在这里觉得构造再加拷贝构造太费事了干脆就合二为一了。其实对于这里的优化不同编译器是有区别的像一下VC、DevC可能就不会去优化越是新的编译器越可能去进行这种优化。在本文的最后一个模块我还会详细展开分析 小蛋但您是怎么知道中间赋值这一块产生了临时对象呢如果不清楚编译器的优化机制这一块肯定就会认为这里只有一个构造  这点确实是若是我现在不是直接赋值了而是去做一个引用此时会发生什么呢 Date d3 2024;可以看到报出了一个错误原因就在于d3是一个Date类型2024则是一个内置类型的数据 但若是我在前面加一个const做修饰后就不会出现问题了这是为什么呢其实这里的真正原因就在于产生的这个【临时变量】临时变量具有常性它就是通过Date类的构造函数构造出来的同类型之间可以做引用。还有一点就是临时变量具有常性所以给到一个const类型修饰对象不会有问题  ✨ 引出 explicit 关键字  但若是你不想让这种隐式类型转换发生怎么办呢此时就可以使用到C中的一个关键字叫做explicit  它加在构造函数的前面进行修饰有了它就不会发生上面的这一系列事儿了它会【禁止类型转换】 explicit Date(int year):_year(year) {}多参构造函数 对于上面所讲的都是基于单参的构造函数接下去我们来瞧瞧多参的构造函数  //多参构造函数 Date(int year, int month ,int day 31):_year(year),_month(month),_day(day) {}根据从右往左缺省的规则我们在初始化构造的时候要给到2个参数d1没有问题传入了两个参数但是若是像上面那样沿袭单参构造函数这么去初始化还行得通吗很明显不行编译器报出了错误 小蛋那要怎么办呀对于一定要传入多参数进行构造的场景 这个时候就要使用到我们C11中的新特性了在对多参构造进行初始化的时候在外面加上一个{}就可以了可能你觉得这种写法像是C语言里面结构体的初始化但实际不是而是在调用多参构造函数 Date d2 { 2023, 3 };不仅如此对于下面这种也同样适用调用构造去产生一个临时对象 const Date d3 { 2024, 4 };那要如何去防止这样的隐式类型转换发生呢还是可以使用到explicit关键字吗 //多参构造函数 explicit Date(int year, int month ,int day 31):_year(year),_month(month),_day(day) {}可以看到加上explicit关键字做修饰同样可以起到【禁止类型转换】的作用 还有一种例外当缺省参数从右往左给到两个的时候此时只需要传入一个实参即可那也就相当于是单参构造explicit关键字依旧可以起到作用· explicit Date(int year, int month 3,int day 31):_year(year),_month(month),_day(day) {}✨为什么需要explicit关键字  所以对于可读性不是很好的代码可以使用explicit修饰构造函数将会禁止构造函数的隐式转换  ✨ 怎么使用explicit关键字 explicit关键字在C中只能用于修饰类的构造函数它用来修饰只有一个参数的类构造函数以表明该构造函数是显式的而非隐式的。         只要在构造函数名前加上explicit就能禁止类对象之间的隐式转换、禁止隐式调用拷贝构造函数。 四、总结  五、共勉 以下就是我对C explicit关键字的理解如果有不懂和发现问题的小伙伴请在评论区说出来哦同时我还会继续更新对C 的理解请持续关注我哦
http://www.hkea.cn/news/14258447/

相关文章:

  • 企业门户网站建设方案后台管理招聘网站上找在家做
  • 建设网站有哪些公司一般做网站上传的图片大小
  • 西安网站建设模板教育培训网站建设
  • 聊城app制作网站乐山网站开发公司电话
  • 青岛网站建设与推广适合女生的计算机专业有哪些
  • 韩国化妆品网站金色flash片头网站建设总结体会
  • 国家建设网站杭州做网站比较好的公司
  • 建网站 域名株洲市
  • 网站建设结构设计方案3000元做网站
  • 网站 宗旨wordpress x theme
  • 折叠网站开发工程师wordpress编辑文章怎么开头空两行
  • 西渡网站建设wordpress 固定链接404
  • 小型企业网站如何建设网站备案包括哪些
  • 哪个兄弟来个直接看的网站中国500强企业排名完整版
  • 企业网站开发需求分析代理ip地址
  • 直播网站开发步骤wordpress分享文章缩略图
  • 绍兴网站建设报价中国工商网注册官网
  • 营销网站建设需要多少钱网站网页设计培训
  • 海淀区社区建设网站软件开发大学
  • 网站建设方案书一定要交环保设备网站怎么做
  • 美工怎么做网站效果图怎样建网站宣传产品
  • 网站更名策划方案如何制作一个企业网站
  • python基础教程推荐怎么关闭seo查询
  • 谷歌找网站后台关于设计的网站有哪些
  • 潍坊手机网站制作网站空间和云服务器
  • dede网站名称更改不了怎样建设公司网站小程序
  • wordpress tag页面优化seo优化一般包括哪些内容
  • 个人备案可以做盈利网站吗wordpress的登录页
  • 电子商务网站平台开发建设方案html居中代码
  • 效果好的网站建设公搜索引擎关键词的工具