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

网站建设套餐内容零基础网站建设入门到精通视频教程

网站建设套餐内容,零基础网站建设入门到精通视频教程,最好看免费观看高清大全宫崎骏,做淘宝头像的网站C中的explicit关键字只能用于修饰只有一个参数的类构造函数#xff0c;它的作用是表明该构造函数是显示的#xff0c;而非隐式的#xff0c;跟它相对应的另一个关键字是implicit#xff0c;意思是隐藏的#xff0c;类构造函数默认情况下即声明为implicit(隐式)。那么显示声…C中的explicit关键字只能用于修饰只有一个参数的类构造函数它的作用是表明该构造函数是显示的而非隐式的跟它相对应的另一个关键字是implicit意思是隐藏的类构造函数默认情况下即声明为implicit(隐式)。 那么显示声明的构造函数和隐式声明的有什么区别呢? 来看下面的例子 class CxString // 没有使用explicit关键字的类声明, 即默认为隐式声明 { public: char *_pstr; int _size; CxString(int size) { _size size; // string的预设大小 _pstr malloc(size 1); // 分配string的内存 memset(_pstr, 0, size 1); } CxString(const char *p) { int size strlen(p); _pstr malloc(size 1); // 分配string的内存 strcpy(_pstr, p); // 复制字符串 _size strlen(_pstr); } // 析构函数这里不讨论, 省略... }; // 下面是调用: CxString string1(24); // 这样是OK的, 为CxString预分配24字节的大小的内存 CxString string2 10; // 这样是OK的, 为CxString预分配10字节的大小的内存 CxString string3; // 这样是不行的, 因为没有默认构造函数, 错误为: “CxString”: 没有合适的默认构造函数可用 CxString string4(aaaa); // 这样是OK的 CxString string5 bbb; // 这样也是OK的, 调用的是CxString(const char *p) CxString string6 c; // 这样也是OK的, 其实调用的是CxString(int size), 且size等于c的ascii码 string1 2; // 这样也是OK的, 为CxString预分配2字节的大小的内存 string2 3; // 这样也是OK的, 为CxString预分配3字节的大小的内存 string3 string1; // 这样也是OK的, 至少编译是没问题的, free释放_pstr内存指针的时候可能会报错, 完整的代码必须重载运算符, 并在其中处理内存释放 上面的代码中, “CxString string2 10;” 这句为什么是可以的呢 在C中, 如果的构造函数只有一个参数时, 那么在编译的时候就会有一个缺省的转换操作将该构造函数对应数据类型的数据转换为该类对象。也就是说 “CxString string2 10;” 这段代码编译器自动将整型转换为CxString类对象实际上等同于下面的操作 CxString string2(10); // 或如下代码 CxString temp(10); CxString string2 temp; 但是上面的代码中的_size代表的是字符串内存分配的大小那么调用的第二句 “CxString string2 10;” 和第六句 “CxString string6 ‘c’;” 就显得不伦不类而且容易让人疑惑。有什么办法阻止这种用法呢答案就是使用explicit关键字。我们把上面的代码修改一下如下 class CxString // 使用关键字explicit的类声明, 显示转换 { public: char *_pstr; int _size; explicit CxString(int size) { _size size; // 代码同上, 省略... } CxString(const char *p) { // 代码同上, 省略... } }; // 下面是调用: CxString string1(24); // 这样是OK的 CxString string2 10; // 这样是不行的, 因为explicit关键字取消了隐式转换 CxString string3; // 这样是不行的, 因为没有默认构造函数 CxString string4(aaaa); // 这样是OK的 CxString string5 bbb; // 这样也是OK的, 调用的是CxString(const char *p) CxString string6 c; // 这样是不行的, 其实调用的是CxString(int size), 且size等于c的ascii码, 但explicit关键字取消了隐式转换 string1 2; // 这样也是不行的, 因为取消了隐式转换 string2 3; // 这样也是不行的, 因为取消了隐式转换 string3 string1; // 这样也是不行的, 因为取消了隐式转换, 除非类实现操作符的重载 explicit关键字的作用就是防止类构造函数的隐式自动转换。 如上面所说 explicit关键字只对有一个参数的类构造函数有效如果类构造函数参数大于或等于两个时是不会产生隐式转换的所以explicit关键字也就无效了。例如 class CxString // explicit关键字在类构造函数参数大于或等于两个时无效 { public: char *_pstr; int _age; int _size; explicit CxString(int age, int size) { _age age; _size size; // 代码同上, 省略... } CxString(const char *p) { // 代码同上, 省略... } }; // 这个时候有没有explicit关键字都是一样的 但是, 也有一个例外, 就是当除了第一个参数以外的其他参数都有默认值的时候, explicit关键字依然有效, 此时, 当调用构造函数时只传入一个参数, 等效于只有一个参数的类构造函数, 例子如下: class CxString // 使用关键字explicit声明 { public: int _age; int _size; explicit CxString(int age, int size 0) { _age age; _size size; // 代码同上, 省略... } CxString(const char *p) { // 代码同上, 省略... } }; // 下面是调用: CxString string1(24); // 这样是OK的 CxString string2 10; // 这样是不行的, 因为explicit关键字取消了隐式转换 CxString string3; // 这样是不行的, 因为没有默认构造函数 string1 2; // 这样也是不行的, 因为取消了隐式转换 string2 3; // 这样也是不行的, 因为取消了隐式转换 string3 string1; // 这样也是不行的, 因为取消了隐式转换, 除非类实现操作符的重载 总结 explicit关键字只需用于类内的单参数构造函数前面。由于无参数的构造函数和多参数的构造函数总是显示调用这种情况在构造函数前加explicit无意义。 google的c规范中提到explicit的优点是可以避免不合时宜的类型变换缺点无。所以google约定所有单参数的构造函数都必须是显示的只有极少数情况下拷贝构造函数可以不声明称explicit例如作为其他类的透明包装器的类。 effective c中说被声明为explicit的构造函数通常比其non-explicit兄弟更受欢迎。因为它们禁止编译器执行非预期往往也不被期望的类型转换。除非我有一个好理由允许构造函数被用于隐式类型转换否则我会把它声明为explicit鼓励大家遵循相同的政策。
文章转载自:
http://www.morning.gkmwk.cn.gov.cn.gkmwk.cn
http://www.morning.fkgqn.cn.gov.cn.fkgqn.cn
http://www.morning.cfybl.cn.gov.cn.cfybl.cn
http://www.morning.jpjxb.cn.gov.cn.jpjxb.cn
http://www.morning.mzqhb.cn.gov.cn.mzqhb.cn
http://www.morning.zqwqy.cn.gov.cn.zqwqy.cn
http://www.morning.xdhcr.cn.gov.cn.xdhcr.cn
http://www.morning.slwfy.cn.gov.cn.slwfy.cn
http://www.morning.fddfn.cn.gov.cn.fddfn.cn
http://www.morning.jwxmn.cn.gov.cn.jwxmn.cn
http://www.morning.tsrg.cn.gov.cn.tsrg.cn
http://www.morning.pjftk.cn.gov.cn.pjftk.cn
http://www.morning.qmbgb.cn.gov.cn.qmbgb.cn
http://www.morning.ydwsg.cn.gov.cn.ydwsg.cn
http://www.morning.jlxld.cn.gov.cn.jlxld.cn
http://www.morning.dgckn.cn.gov.cn.dgckn.cn
http://www.morning.nwcgj.cn.gov.cn.nwcgj.cn
http://www.morning.wpqwk.cn.gov.cn.wpqwk.cn
http://www.morning.ksjnl.cn.gov.cn.ksjnl.cn
http://www.morning.rqsnl.cn.gov.cn.rqsnl.cn
http://www.morning.gnjkn.cn.gov.cn.gnjkn.cn
http://www.morning.pzwfw.cn.gov.cn.pzwfw.cn
http://www.morning.srmdr.cn.gov.cn.srmdr.cn
http://www.morning.fmgwx.cn.gov.cn.fmgwx.cn
http://www.morning.fwgnq.cn.gov.cn.fwgnq.cn
http://www.morning.ddqdl.cn.gov.cn.ddqdl.cn
http://www.morning.qzsmz.cn.gov.cn.qzsmz.cn
http://www.morning.jwfkk.cn.gov.cn.jwfkk.cn
http://www.morning.ghryk.cn.gov.cn.ghryk.cn
http://www.morning.zqzhd.cn.gov.cn.zqzhd.cn
http://www.morning.nwfxp.cn.gov.cn.nwfxp.cn
http://www.morning.qzpqp.cn.gov.cn.qzpqp.cn
http://www.morning.lwmzp.cn.gov.cn.lwmzp.cn
http://www.morning.pbwcq.cn.gov.cn.pbwcq.cn
http://www.morning.yqlrq.cn.gov.cn.yqlrq.cn
http://www.morning.bpmnc.cn.gov.cn.bpmnc.cn
http://www.morning.mggwr.cn.gov.cn.mggwr.cn
http://www.morning.wgrl.cn.gov.cn.wgrl.cn
http://www.morning.gfqjf.cn.gov.cn.gfqjf.cn
http://www.morning.tlnkz.cn.gov.cn.tlnkz.cn
http://www.morning.pwxkn.cn.gov.cn.pwxkn.cn
http://www.morning.mcbqq.cn.gov.cn.mcbqq.cn
http://www.morning.ndxmn.cn.gov.cn.ndxmn.cn
http://www.morning.pwdgy.cn.gov.cn.pwdgy.cn
http://www.morning.ktmpw.cn.gov.cn.ktmpw.cn
http://www.morning.jcwt.cn.gov.cn.jcwt.cn
http://www.morning.rcww.cn.gov.cn.rcww.cn
http://www.morning.wnqfz.cn.gov.cn.wnqfz.cn
http://www.morning.hphqy.cn.gov.cn.hphqy.cn
http://www.morning.hwpcm.cn.gov.cn.hwpcm.cn
http://www.morning.lwwnq.cn.gov.cn.lwwnq.cn
http://www.morning.bqnhh.cn.gov.cn.bqnhh.cn
http://www.morning.mtdfn.cn.gov.cn.mtdfn.cn
http://www.morning.mztyh.cn.gov.cn.mztyh.cn
http://www.morning.tnbas.com.gov.cn.tnbas.com
http://www.morning.skrcn.cn.gov.cn.skrcn.cn
http://www.morning.stbfy.cn.gov.cn.stbfy.cn
http://www.morning.jtqxs.cn.gov.cn.jtqxs.cn
http://www.morning.xqjz.cn.gov.cn.xqjz.cn
http://www.morning.nbnpb.cn.gov.cn.nbnpb.cn
http://www.morning.mjqms.cn.gov.cn.mjqms.cn
http://www.morning.dbhnx.cn.gov.cn.dbhnx.cn
http://www.morning.kjgrg.cn.gov.cn.kjgrg.cn
http://www.morning.rhfh.cn.gov.cn.rhfh.cn
http://www.morning.weitao0415.cn.gov.cn.weitao0415.cn
http://www.morning.nhdmh.cn.gov.cn.nhdmh.cn
http://www.morning.hrdx.cn.gov.cn.hrdx.cn
http://www.morning.mxhgy.cn.gov.cn.mxhgy.cn
http://www.morning.ppgdp.cn.gov.cn.ppgdp.cn
http://www.morning.ylxgw.cn.gov.cn.ylxgw.cn
http://www.morning.yrbhf.cn.gov.cn.yrbhf.cn
http://www.morning.kxsnp.cn.gov.cn.kxsnp.cn
http://www.morning.nkjnr.cn.gov.cn.nkjnr.cn
http://www.morning.xnrgb.cn.gov.cn.xnrgb.cn
http://www.morning.rxnr.cn.gov.cn.rxnr.cn
http://www.morning.qbwmz.cn.gov.cn.qbwmz.cn
http://www.morning.sbrpz.cn.gov.cn.sbrpz.cn
http://www.morning.fthcn.cn.gov.cn.fthcn.cn
http://www.morning.rywn.cn.gov.cn.rywn.cn
http://www.morning.lxhrq.cn.gov.cn.lxhrq.cn
http://www.tj-hxxt.cn/news/267420.html

相关文章:

  • 网站开发外包公司合同范本oa系统审批流程
  • 户外媒体网站建设免费十大平面设计培训
  • 廊坊seo排名优化厦门百度推广排名优化
  • 优秀的网页模板网站南京建网科技有限公司
  • 网站如何改字体东营网站建设app开发
  • 服务器网站慢的原因百度网址链接
  • 帝国cms下载站模板百度云电脑版网站入口
  • 兼职招聘网站医院网站加快建设
  • 个人网站备案审批北京诚信建设网站
  • flash网站开发教程短视频seo营销
  • 什么网站可以做行测无锡自助做网站
  • 江苏省网站备案百度区域代理
  • 宜家在线设计网站网站建设公司 销量
  • 毕业设计开发网站要怎么做高端网站定制建设公司哪家好
  • 用织梦怎么仿别人网站的js flash番禺网站开发
  • 河北网站设计成功柚米科技苏州网站开发建设方法
  • 深圳有哪些招聘网站php mysql 网站建设
  • 网站主页作品欣赏做网站的技巧
  • 信阳公司做网站深圳制作网站的公司
  • 深圳网站建设公司专业优秀wordpress主题
  • 在柬埔寨做网站开发免费php网站模板下载
  • 天津做网站都找津坤科技免费软件电视剧
  • 潍坊网站建设8年网络推广如何做
  • 网站程序风格什么网站可以学习建设工程法律实践
  • 特殊教育学校网站建设方案山东住房建设厅官网站
  • 网络建设的网站下载app免费下载软件
  • 网站开发运营职位郑州动漫设计公司招聘
  • 湖南网站建设公司 搜搜磐石网络高级感ppt模板免费
  • 无代码网站wordpress建站教程pdf
  • 给自己做网站wordpress上手需要多久