- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
EffectiveC的读书笔记版
因为手头只有 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 关键字。
第二版条款
您可能关注的文档
- 93主次矛盾、矛盾主次要方面.ppt
- 9三袋麦子第二课时-.ppt
- 9、醇和酚.doc
- 93岁开法拉利当段子手他是活得最赚男人.pdf
- 9年级上期期中语文试题和的的答案.doc
- 8江汉油区储层保护.ppt
- 9新-文化运动.ppt
- 92黄昏.ppt
- A-第一讲 -鉴赏知识-古代诗歌鉴赏知识-.doc
- 9月车展的策划.ppt
- 2025年网络文学平台版权运营模式创新与版权保护体系构建.docx
- 数字藏品市场运营策略洞察:2025年市场风险与应对策略分析.docx
- 全球新能源汽车产业政策法规与市场前景白皮书.docx
- 工业互联网平台安全标准制定:安全防护与合规性监管策略.docx
- 剧本杀剧本创作审核标准2025年优化与行业自律.docx
- 2025年新能源电动巡逻车在城市安防中的应用对城市环境的影响分析.docx
- 全渠道零售案例精选:2025年行业创新实践报告.docx
- 2025年网约车司乘纠纷处理机制优化与行业可持续发展报告.docx
- 2025年宠物烘焙食品市场法规政策解读:合规经营与风险规避.docx
- 2025年宠物行业数据安全监管政策影响分析报告.docx
文档评论(0)