1.修饰变量
const int val = 100;
表示val的值不能更改,定义时必须初始化
2.修饰指针
int val = 100;
int *const p = &val;
表示指针p一直指向val,即指针的值不能改变,定义时也必须初始化
3.修饰函数参数
void function(const int *p); //参数指针所指内容在函数内为常量不可变
void function(const int &val); //引用参数在函数内为常量不可变
4.修饰对象
const修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。
const修饰的对象,该对象的任何非const成员函数都不能被调用,因为任何非const成员函数会有修改成员变量的企图。
5. const修饰成员变量
const修饰类的成员函数,表示成员常量,不能被修改,同时它只能在初始化列表中赋值。
6. const修饰成员函数
const修饰类的成员函数,与4类似,该成员函数可以访问成员变量,但不能修改类中任何成员变量,不能调用任何非const成员函数。const对象只能调用const成员函数,非const对象可以调用const和非const成员函数。
class A
{
…
void function()const; //const一般写在函数的最后来修饰.
}
( 1 ) 编译器处理方式不同
define宏是在预处理阶段展开。
const常量是编译运行阶段使用。
( 2 ) 类型和安全检查不同
define宏没有类型,不做任何类型检查,仅仅是展开。
const常量有具体的类型,在编译阶段会执行类型检查。