C++博客 :: 首页 :: 联系 ::  :: 管理
  163 Posts :: 4 Stories :: 350 Comments :: 0 Trackbacks

常用链接

留言簿(48)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 397104
  • 排名 - 59

最新评论

阅读排行榜

评论排行榜

尽量不用#define这条语句,这条语句不认为是C++语言的一部分,而且在进行字符替换时会带来很多的问题。

原计划用define定义的普通常量 ,可以换成const定义的常量,如:const double ASPECT_RATIO = 1.653;

但是想用一个const常量定义原define宏定义的指针常量时,除了指针所指的类型要定义成const外,重要的是指针也经常要定义成const。例如,要在头文件中定义一个基于char*的字符串常量,你要写两次const:

                 const char * const authorName = "Scott Meyers";

此语句意思是指针地址和指针指向的变量内容都是不允许修改的。

定义在类内的const常量只能在类构造函数的初始化成员列表中初始化,不能在类体内赋值初始化,除非你定义的const常量是static 修饰的int型。例如: 类体内  这个语句const int NUM_TURNS=5  编译器会报错“only static const integral data members can be initialized within a class”,但是static const int NUM_TURNS=5 就是合法的。出了int其他的static const数据类型,在类体内只能声明,而不能赋值。这种常量赋值的地方应该在类的实现文件的函数体外,最好在构造函数的前面赋值 例如 const float NUM_TURNS=3.0;放在类的构造函数前面。如果你非得在类体内对一个非static的const int常量赋值,那么可以把该常量定义为enum ,例如在类体内:作如下声明是合法的:

enum { NUM_TURNS = 5 }

int  [NUM_TURNS];

 

对于define定义的类似函数的宏,最好用内联函数替代,内联函数为前置inline 的函数声明和定义在一起的短小函数。内联函数提供类型检查,同样免除了若干系统调用的过程,得到较高的效率!

posted on 2008-01-15 20:51 sdfasdf 阅读(2117) 评论(1)  编辑 收藏 引用 所属分类: C++

Feedback

# re: Effective C++学习笔记:条款1:尽量用const和inline而不用#define[未登录] 2008-09-16 23:09 dd
dasdfasfasfasf  回复  更多评论
  


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