(1)尽量以const、enum、inline替换#define
来源:互联网 发布:mac电脑忘记密码怎么办 编辑:程序博客网 时间:2024/05/24 06:38
一、对于 #define AS 1.6,通常用 const double ASI=1.6;来替换更好
原因如下:(1)ASI肯定可以写被编译器看到,当然就会进入记号表内;(2)对浮点常量而言,使用常量可能比使用#define导致较小量的码;
当我们以常量替换#defines,有两种特殊情况必须要说明:(1)定义常量指针,有必要将指针声明为 const。例如若要在头文件内定义一个常量 char*-based字符串,必须写两次 const:const char*const authorName ="Tom Tomas";通常使用 string对象更好,因此可以改写为const std::string authorName =("Tom Tomas");
(2)第二个值得注意的是class常量。为了将常量的作用域限制于class内,你必须让它成为class的一个成员;而为了确保此常量之多只有一份实体,你必须让它成为一个 static 成员:class GamePlayer{private:static const int NumTurns=5;//常量声明式int scores[NumTurns]; //使用常量式....};通常C++要求对所使用的东西提供一个定义式。但是,在这里,如果它是个class专属常量而且又是static且为整数类型(例如:int,char,bool),则需要特殊处理。只要不取它们的地址,你就可以声明并使用它们而不需要提供它们的定义式。否则,如果要取地址或者是编译器一定要看到定义式,那么,你一定要另外提供如下定义式:const int GamePlayer::NumTurns; //NumTurns的定义;将这个式子放在实现文件而不是头文件中,由于NumTurns在声明的时候已经设有初值,所以在定义的时候就不用赋初值了。(旧式的编译器可能不支持在声明中赋初值,此时,可以将初值放在定义上。)万一你的编译器值允许“static整数型class常量”完成“in class 初值设定”,可以改用所谓的“the enum hack”补偿做法。于是GamePlayer 可以如下定义:class GamePlayer{private:enum{ NumTurns=5 };int scores[NumTurns];...};
二、对于形似函数的宏,最好改用inline的函数替换#define。
templateinline void callWithMax (const T& a, const T& b){f( a>b? a : b);}这个template产出一整群函数,每个函数都接受两个同型对象,并以其中较大者调用f。
总结:1.对于单纯常量,最好以const对象或emun替换#define。2.对于形似函数的宏,最好改用inline函数替换#define。
class GamePlayer{private:static const int NumTurns=5;//常量声明式int scores[NumTurns]; //使用常量式....};通常C++要求对所使用的东西提供一个定义式。但是,在这里,如果它是个class专属常量而且又是static且为整数类型(例如:int,char,bool),则需要特殊处理。只要不取它们的地址,你就可以声明并使用它们而不需要提供它们的定义式。否则,如果要取地址或者是编译器一定要看到定义式,那么,你一定要另外提供如下定义式:const int GamePlayer::NumTurns; //NumTurns的定义;将这个式子放在实现文件而不是头文件中,由于NumTurns在声明的时候已经设有初值,所以在定义的时候就不用赋初值了。(旧式的编译器可能不支持在声明中赋初值,此时,可以将初值放在定义上。)万一你的编译器值允许“static整数型class常量”完成“in class 初值设定”,可以改用所谓的“the enum hack”补偿做法。于是GamePlayer 可以如下定义:class GamePlayer{private:enum{ NumTurns=5 };int scores[NumTurns];...};二、对于形似函数的宏,最好改用inline的函数替换#define。
template
inline void callWithMax (const T& a, const T& b)
{
f( a>b? a : b);
}
这个template产出一整群函数,每个函数都接受两个同型对象,并以其中较大者调用f。
总结:
1.对于单纯常量,最好以const对象或emun替换#define。
2.对于形似函数的宏,最好改用inline函数替换#define。
0 0
- (1)尽量以const、enum、inline替换#define
- 尽量以const、enum、inline替换#define
- 尽量以const,enum,inline替换#define
- 尽量以const,enum,inline替换#define
- 尽量以const、enum、inline替换#define
- 尽量以const,enum,inline替换#define
- [C++]尽量以const,enum,inline替换#define
- 条款02:尽量以const,enum,inline替换#define
- 条款2:尽量以CONST,ENUM,INLINE替换#DEFINE
- 条款02:尽量以const, enum, inline 替换 #define
- 条款2:尽量以const,enum,inline替换#define
- 《Effective C++》尽量以const,enum,inline,替换#define
- 条款2:尽量以const,enum,inline替换#define
- 条款2:尽量以const, enum, inline 替换#define
- item2: 尽量以const,enum,inline替换#define
- 条款2:尽量以const,enum,inline 替换 #define
- 条款02 尽量以const ,enum,inline替换#define
- 条款02:尽量以const、enum、inline替换#define
- avc: denied { read write }
- 【Java】产生1-10的随机整数
- hdu5688 2016"百度之星" - 资格赛(Astar Round1)Problem D map使用
- linux单用户模式(single)
- 图论总结模板
- (1)尽量以const、enum、inline替换#define
- Linux多线程锁属性设置
- 支付宝--android应用程序如何调用支付宝接口
- 数据持久化
- Redis配置文件解读
- C++对C的扩展之bool(布尔类型)
- Unity Game窗口中还原Scene窗口摄像机操作
- AngularJS 指令详解(业界大牛的详细学习笔记)
- div中的元素是浮动导致兄弟元素没有换行