- 1、本文档共36页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
因为手头只有 Scott 的第二版《Effective C++》电子版和第三版纸质印刷版本。本想为了方便,以第二版为模板。仔细看来,二
者区别还是不小的,所以还是以第三版为模板。
第一章 从 C 转向 C++
我应该算是从 C 到 C++的典型了,虽然我不是什么老人,可是从我接触编程至今,区区 6、7 年间,我竟是用了 5 年多的 C,而且一
直是在 TC 2.0 的环境下。当我决心放弃TC 的时候(2006 年上半年),距 C++之父 Bjarne Stroustrup 所著的《The C++ Programming
Language》问世已经过了 21 年了,距 Scott Meyers 的《Effective C++》第一版也已 16 年之久,想来不禁为自己的后知后觉感到
惭愧。
条款 01:视C++为一个语言联邦
凭个人体会,不同背景的人会将 C++看作不同的语言,正应了 “横看成岭侧成峰,远近高低各不同”。
C++时代,对于 C 程序员最大的幸事和不幸都是基于一点:C++ = C,我可以抱残守缺,认为 C 就是 C++。
当然,大多数C 程序员并不会这么做,起码,我不会一直这么做。我首先会积极地用 class 替代 struct,然后试着自定义constructors
和 destructors,用 protected 和 virtual……
这样大概过了半年,我就从一个 Structrue-Oriented coder 进化成了一个 Object-Oriented coder。
现在,为了工作的方便,在没有经过任何理论学习的情况下,我开始使用 STL,却没有去深入探寻 STL 源代码。当然,我知道这是
不够的,也是不好的,等我把《Effective C++》看得更好一些,我就去看 Template 和 STL。
条款 02:尽量以 const、enum、inline 替换#define
尽量用编译器而不用预处理,作者这样说的原因是因预处理造成的 bugs 如果在编译时暴露,那将是非常难揪的,尤其是带参数的
宏:
#define max(a,b) ((a) (b) ? (a) : (b))
int a = 5, b = 0;
max(++a, b); // a 的值增加了 2 次
max(++a, b+10); // a 的值只增加了 1 次
原因就在于上述语句在预处理时被处理成:
((++a) (b) ? (++a) : (b));
((++a) (b+10) ? (++a) : (b));
危险啊!
即使我可以凭借丰富的经验避免上述错误,但违反 OO 原则的帽子我是不愿戴的,所以我更愿意用 inline 函数来代替带参的宏。
即使我只使用无参数的宏,也不如多考虑用 const 或 enum。在大多数情况下,用 const (如果想保证一个类只有一个对应常量,就
用 static const)来声明常量显然比#define 来得高明,此时#define 的优势在于其地址不能被获取,而 const 并不具备这一功能,
考虑一下 enum 吧,OK,问题迎刃而解。
第二版条款 02:尽量用iostream而不用stdio.h
在 C 中,scanf 和 printf 的最大问题是其类型安全的不确定。经常遇到有朋友提出类似的困惑:为什么 scanf 的数据一团糟,为
什么 printf 的结果和预期的不一致?另一个问题是 scanf 和 printf 对于复杂的结构不能扩展使用。
至于使用iostream的理由,听听 Scott 怎么说吧: “iostream库的类和函数所提供的类型安全和可扩展性的价值远远超过你当
初的想象,所以不要仅仅因为你用惯了stdio.h而舍弃它。毕竟,转换到 iostream 后,你也不会忘掉stdio.h。”
条款 03:尽可能使用 const
尽可能使用 const 可能会让你多写很多个 const,而且会在你试图改变被 const 修饰的 “变量”时报告一大堆 bugs。然而,如果没
有了它们,就成了掩耳盗铃了吧?后果是不是不堪设想呢?很简单,你只需要看看 const 修饰的是谁,就知道谁不能被改变了。
对于返回 const 的函数,它是为了防止你或者别人对返回的对象进行写操作(赋值)。
bitwise const 成员函数保证了在函数内部任何成员(static 除外)都不会被改变,logical const 则会给需要改变的成员变量在
声明时加上 mutable 关键字。
第二版条款 0
您可能关注的文档
- 第十二章 vs2005命令.doc
- 2015中科院资源与环境学院考博参考书、真题、报录比、复试分数线、考博大纲、资料笔记、研究生招生专业目录.pdf
- 第十一章 GADS--matlab遗传算法工具箱使用总结.pdf
- 第6章 java基础知识.pdf
- 基于仿真器的源码级调试器设计与实现.pdf
- 第6章 java初级部分知识点.docx
- 开发职系C++技能结构化复习资料4资料.pdf
- 计130121第三次作业教材.doc
- MA1.4数列的发散与子列的概念.pdf
- ZY-609通用设备管理与维修服务细则(2012版).pdf
- 新世纪评级-2024年上半年融资租赁行业信用观察.docx
- 粉丝尼尔森关于西班牙裔媒体消费和体育参与的游戏手册 Fanáticos Nielsen’s playbook on Hispanic audiences, sports and media engagement.docx
- 中国科学技术信息研究所:2024中国科技论文统计报告.docx
- 中国奶业经济月报2024年09月.docx
- 小红书 -乘风造势:女性护理双11营销解码全指南2024_部分1.docx
- 西窗科技:2024年海外婚纱礼服市场洞察报告 -婚纱礼服选品指南带你把握甜蜜经济.docx
- 2024年中国人才发展现代化指数.docx
- 2024 云栖大会微服务和网关相关演讲材料.docx
- 房地产 -毛坯房交付标准及品质提升方案.docx
- 房地产 -2024年一建管理《红宝书》 -建设工程项目管理历年真题解析及预测.docx
文档评论(0)