Effective C++学习笔记:条款1:尽量用const和inline而不用#define

尽量不用#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 的函数声明和定义在一起的短小函数。内联函数提供类型检查,同样免除了若干系统调用的过程,得到较高的效率!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值