Note of Justin

关于工作和读书的笔记

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  47 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks

留言簿(14)

搜索

  •  

积分与排名

  • 积分 - 50691
  • 排名 - 434

最新评论

阅读排行榜

评论排行榜

[原创文章欢迎转载,但请保留作者信息]
Justin 于 2009-10-23

这回讲的是#define的问题。
很多面经上面都不会缺少关于代码中常数一定要define一下增加可读性等等。认真D学习鸟Item2我才知道:看来我也算是中毒不浅……

大师第二堂课的中心思想是:

  1. 同学们以后需要定义常量时,不要用#define啦,改用const修饰的变量或是用enum吧
  2. 要想写一些简短小函数时,别考虑#define啦,改用template+inline吧

光知其然当然不行,下面是其所以然:

  1. 原因是用const减小了代码大小,同时还使得封装(encapsulation)变得可行,而且,在调试的时候,因为const定义的变量是会加在符号表(Symbol Table)的,就比#define的常量要方便跟踪了(在预处理阶段,常量的名字就已经被替换掉了)
    在一些特定的情况下(自己去查书啦,懒得抄书了)如果不能用const取代#define,就用enum。除了不能获取一个enum的地址之外,这种方法和const的用法其实差不多。
  2. inline函数和宏有个共同的地方,他们都不会有函数调用的栈的开销。再喊上模板(template)来帮忙,就不用去考虑实际调用时的参数类型。
    有了这两兄弟,就可以淘汰掉#define了,因为这个家伙出现的地方经常会很隐蔽地“强奸”传进的参数,出来以后可能就已经不成人样了。比如说:传进a++作为参数……(OK,又到了自己去看书找例子的时候了:))

于是乎,在const、enum和模板inline的联合进攻下,#define溃不成军痛哭流涕尿着裤子泪奔而去~

posted on 2009-12-15 10:16 Justin.H 阅读(1549) 评论(1)  编辑 收藏 引用 所属分类: Effective C++ 炒冷饭

Feedback

# re: 读书笔记:Effective C++ 炒冷饭 - Item 2 用const、enum和模板inline推翻#define的统治[未登录] 2010-05-12 11:28 meglory
过来支持一下你的这个系列
很佩服能坚持写文章的人~  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理