effective c 读书笔记版.pdfVIP

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
effective c 读书笔记版

因为手头只有Scott的第二版 《Effective C++》电子版和第三版纸质印刷版本。本想为了方便,以第二版为模板。仔细看来,二 者区别还是不小的,所以还是以第三版为模板。 第一章 从C转向C++ 我应该算是从C到C++的典型了,虽然我不是什么老人,可是从我接触编程至今,区区6、7年间,我竟是用了5年多的C,而且一 直是在TC2.0的环境下。当我决心放弃TC 的时候 (2006年上半年),距C++之父BjarneStroustrup所著的《TheC++Programming Language》问世已经过了21年了,距ScottMeyers的 《EffectiveC++》第一版也已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 (如果想保证一个类只有一个对应常量,就 用staticconst)来声明常量显然比#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关键字。 第二版条款03:尽量用new和delete而不用malloc和free 在C 中,我们谨记malloc和free是我们在使用指针时的忠实朋友,在C++中,我们需要为对象、为含有对象的对象进行内存分配 的时候,malloc和free就帮不了我们太

文档评论(0)

celkhn5460 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档