const 可以理解为read-only
在C中用于定义静态变量、修饰函数的参数或者返回值
在C++中用于修饰函数的定义、定义类的成员函数
一般而言const有以下几个作用:
1.定义常量
2.类型检查、保护被修饰的东西 void fun(const int i) 那么形参就是不可变的
3.和宏定义一样 避免模糊的数字出现 const int MAX=255;
4.为函数重载提供参考
class A
{
void f(int i){......}
void f(int i)const{......}上一个函数的重载
}
5.节省空间 避免不必要的内存分配:(const常量在程序运行过程中只有一份复制品)
const double pi=2.1415926;//此时并未将pi放入只读存储器
double i=pi;//为pi分配内存 以后不再分配
double j=pi;
6.提高程序效率
编译器通常不为普通const常量分配存储空间 而是将他们保存在符号表中 这使得它成为一个编译期间的常量 没有了存取与读内存的操作 效率得以提高
二、 常指针
const int *p;p可变,p所指向的对象不可变
int const *p;同上
int *const p; p不可变 p指向的对象可变
const int *const p;p和p所指向的对象都不可变;
三、常引用
1、用于修饰普通变量的只读属性别名
int ival=1024; const int &ref=ival; ref就是ival的别名 但是ref的值已经不能修改了
常引用初始化时可以直接赋非左值(左值就是可以取得地址 而常量就是非左值)
const double & d=1.0;
而非常引用就不可以直接赋非左值
double &d =1.0;错误
2. 用于函数形参 可以确保在函数内不会改变实参的值
void fun(const int & b);