1.尽量以const ,enum,inline替换define
Posted 邗影
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.尽量以const ,enum,inline替换define相关的知识,希望对你有一定的参考价值。
1.#define为预处理阶段命令
原因:有可能记号名称没有进入记号表,而出现编译错误,即编译器并没看到过该定义。
class专属常量const 一般定义为static,保证该常量至多有一份实体。
枚举类型值可充当intS型使用。enum{num=3};现在num就是3的一个记号。
对于取地址操作:const是合法的,但是enum和define不能进行取地址操作。
#define定义函数宏的时候容易产生歧义。(括号分配等等,计算顺序。。)
宏无法定义成private,但是内联函数inline可以定义成private inline。
总结:对于单纯常量,做好以const,enum代替#define
对于函数类型的宏定义,最好通过inline替代,因为内联函数可以很好地遵守作用域和访问规则。
2。尽量在定义不变常量的时候用const.编译器会帮助强制执行这项约束。const可以用来修饰:常量(全局,局部),函数,文件,区块作用域中的static对象,指针等。。
const修饰指针:const在*左边,表示被指物是常量,const出现在*右边,表示指针自身是常量。也可出现在*两边。
左边:const char*ptr;等价于char const*ptr;常量指针,指向常量的指针。
右边:指针常量,指向的那块东西不能变,但是东西的值是可以变的。
常量const修饰函数:函数返回值为常量是可以避免用户操作错误而造成的意外。
const成员函数:方便调用const变量。常量性不同的两个函数是可以被重载的,即是否有const修饰的两个函数,是不同的,类似于重载操作。
const char& operator[](size_t p)const{...}
char& operator[](size_t p2){..}
重载的两个不同的函数。。
注意:当const与non-const成员函数有着本质相同的实现时(有一些重复的操作),用NON-CONST去调用const版本的函数可以避免代码重复。原因是const承诺不改变对象的逻辑状态,但是当你用const去调用非const的时候,非const并没承诺不改变对象的逻辑状态,这就造成错误。
以上是关于1.尽量以const ,enum,inline替换define的主要内容,如果未能解决你的问题,请参考以下文章
NO.2 尽量以const,enum,inline 替换 #define
条款02:尽量以const,enum,inline替换#define
条款2:尽量以const,enum,inline替换#define
Effective C++ 条款2:尽量以const,enum,inline替换#define