const与#define的比较:
- const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。对后者只进行字符替换,没有类型安全检查,发生在预处理时期。同时对字符替换时可能发生意料不到的错误。
- 有些调式工具可以对const常量进行调试,却不能对宏常量进行调试。
用const修饰函数的参数,只能修饰输入参数
- 如果输入参数采用指针传递,加const可以防止意外的改动指针,起到保护作用。
- 如果输入参数采用值传递,由于函数将自动产生临时变量用于复制该参数,所以加const没有意义。
- 对于非内部数据类型的参数,如果不期望会改变参数本身,可以通过加const并以引用方式传递。
用const修饰函数的返回值
- 如果给以指针传递的方式的函数返回值加上const,表示该指针的内容不能更改。并只能被赋给const修饰的同类型指针。
- 如果函数以值传递的方式,那么加const没有任何意义,
- 函数返回值采用引用传递的场合并不多,一般值出现在类的赋值函数中,目地是为了实现链式操作
const成员函数:任何不会修改数据成员的函数都应该声明为const。