用处
定义一种值无法改变的变量,供其他程序使用。
它是一个修饰类型的关键字,需要初始化,表示变量在初始化后不再可以改变。
const与宏定义的区别
1、发生的时间不一样,宏定义发生在预处理,const发生在编译时。
2、是否进行了类型转换,宏定义只进行了字符替换,本质上只是别名,没有进行类型检查,编译时可能会出现不可预期的错误;const关键字有类型检查,在编译阶段就能检查出const的错误。
在C++中,推荐多使用const、emun替代掉宏定义
const修饰指针变量
在*前,表示指针可以改变指向,但是不能改变指向的内容的值:
char const * str = "hello";(等同于 const char * str)
这种指针称为常量指针。
在*后面,不能改变指向,但是可以改变指针所指变量的值:
int * const p = &a;
*p = 5;
这种称为指针常量;
双重限定下,为常常量:
const int * const p = &number; //指向与值都不可改变
可以看到,const是修饰离右边最近的一个变量,将其先定为常量。
const在函数中的使用
1、修饰函数
void fun(args) const{}
常量函数,在函数内部无法对对象的数据成员进行修改,并且函数内不可调用非const函数。这种用法是为了防止修改数据成员,常在访问成员变量值的方法使用;
2、修饰函数的参数
void fun(const args){}
防止传入的参数在函数中被修改,一般与引用和指针一起使用,表示引用对象但是不允许修改对象的值;
3、修饰函数的的返回指针或者引用
return const obj;
目的是为了防止返回的引用实体或者指针被修改,使得函数的表达式不能作为左值使用,常用于运算符重载。