const
的用法非常灵活,能够大大增强程序的健壮性.
- 定义常量
const int c = 0;
- 保护变量不被更改
void f(const int i) { i=10;//error! }
//如果在函数体内修改了i,编译器就会报错
上述代码传递的是副本,更改影响并不大,const
往往和引用一起使用,节省空间并增强健壮性
void f(const int &i){...}
i 的值为引用,并且不允许被更改.
也可以对返回值为引用的变量加上这个修饰,这样这个引用就不能被更改
const string& get_name() const
{
return name;
}
- 全局调整参数,类似宏定义
- 类型安全检查
void f(const int i) { .........}
//对传入的参数进行类型检查,不匹配进行提示
宏定义仅仅对宏进行替换,没有类型检查,往往会导致意想不到的错误.
- 修饰成员函数
被const
修饰的成员函数,不能改变这个类对象的值(指针访问可以,但是并不推荐)
-
const
对象只能访问const
成员函数,一般对象则都可以(包括const
和其他共有函数)
- 节省空间
当定义const
的时候,仅仅给出了常量的内存地址,并没有分配内存.
在程序执行过程中,仅仅进行一次内存的分配,即使这个值被引用多次.