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并没承诺不改变对象的逻辑状态,这就造成错误。

 

posted on 2017-04-03 19:05  邗影  阅读(445)  评论(0编辑  收藏  举报

导航