尽量使用const、enum、inline代替#define
来源:互联网 发布:金山数据恢复收费吗 编辑:程序博客网 时间:2024/06/05 20:55
1、 # define A 1.6
宁可使用编译器也不使用预处理,原因:
当使用预处理时,记号名称A也许从未被编译器看见(因为预处理是在编译阶段进行替换),所以一旦出现编译错误,(如果A被定义在一个非你写的头文件内),你肯定对1.6以及它的来源毫不知情,这样就会因为追踪它而浪费时间。
因此—>用const替换不会发生这种情况(找编译错误难找的情况)。
# define不能进行安全性类型检查
【 知识点1】
在头文件内定义一个常量不变的字符串有两种方式:
const char* const str = “String”;
const string str(String); //一般选这种形式
【 知识点2】static const
用作类内部static const的初始化问题:
①只有static const int类型的常量才能在类内进行声明和初始化;
②非static const int类型,使用:类内声明,类外初始化形式。
2、enum的引出原因
如果你的编译器不允许使用“const static int class常量”完成类内初始化设定,而且编译器坚持必须在编译器期间知道数组的大小,可改用enum。
理论基础:一个属于枚举类型的数值可全充ints被使用。
“`
class A
{
enum { size = 5 };//令Numturns成为 5 的一个记号名称
int array[size]; //这样就没有问题了
}
/*说明:enum的行为某方面说比较像#define而不像const,有时候这正是你想要的。例如:取一个const的地址是合法的,取一个enum的地址是不合法的,而取一个#define的地址通常是不合法的。
【因此】—>如果你不想让别人的指针或者引用指向你的某个整数常量,enum可以帮助你实现这个约束。此外,enum和#define绝对不会导致非必要的内存分配*/
3、inline函数的引出
# define CALL_BACK(a,b) f((a)>(b)?(a):(b))
无论何时都要记住:必须为宏中的所有实参加上小括号;
但是即便这样做,有时候错误也难以避免。
【总结】
对于单纯常量,最好用const、enum替换#define
对于形似函数的宏,最好用inline函数替换#define
- 尽量使用const、enum、inline代替#define
- 尽量以const enum inline 代替 #define
- 条款2 尽量用const,enum,inline代替#define
- 第二条:尽量以const、enum、inline代替#define
- 尽量使用const、enum、inline,避免使用#define
- 转帖 尽量使用const、enum、inline,避免使用#define
- 尽量使用const、enum、inline,避免使用 #define
- 尽量不要使用#define,而是用const、enum、inline替换。
- 尽量不要使用#define,而是用const、enum、inline替换。
- 尽量不要使用#define,而是用const、enum、inline替换。
- 尽量不要使用#define,而是用const、enum、inline替换。
- 尽量以const、enum、inline替换#define
- 尽量以const,enum,inline替换#define
- 尽量以const,enum,inline替换#define
- 尽量以const、enum、inline替换#define
- 尽量以const,enum,inline替换#define
- 尽量以const,enum,inline代替#define——effective c++学习笔记
- effective c++ 条款2 尽量以const enum inline代替#define
- 递归之知识性总结
- 凑算式
- hdu 2031 进制转换
- AOP的实现原理—反射与动态代理
- 【Spring】(一)Spring入门及原理
- 尽量使用const、enum、inline代替#define
- Practice6_3_map_sort
- Find Largest Value in Each Tree Row
- nginx 在linux 上启动 /usr/local/Nginx/logs/Nginx.pid 文件无法找到
- ActiveMQ集群搭建
- 开脑洞,用声音DEBUG
- CCF模板生成工具
- 什么是XSS攻击
- Git——Day2(开源项目贡献流程)