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

尽量不用#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 阅读(877) 评论(1)  编辑 收藏 引用 所属分类: C++

Feedback

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


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
相关链接:
网站导航: