const作用:
1)定义 const常量:const int MAX =100;
2)方便参数调整和修改。
3)保护被修饰的东西。
4)为函数重载提供参考。
5)节省空间,避免不必要的内存分配。const定义的常量在运行时只有一份复制品,#define则有若干个。
6)提高程序的效率,在不需要取地址的时候,即普通的const常量,不分配内存,存入符号表,成为编译期间的常量。
例如:
#include <iostream>
using namespace std;
int main()
{
const int a=10;
const int& b=a;
int *p=const_cast<int*>(&a);
(*p)++;
int c=a;
cout<<a<<' '<<b<<' '<<*p<<' '<<c;
return 0;
}
//输出为10,11,11,10;
引申1:什么情况下使用const:
1.修饰一般常量,int const a=2,const int a=2均可。
2.修饰常数组。const int a[5]={1,2,3,4,5};
3.修饰常对象:class A; const A a;需要进行初始化,且对象不能被更新。
4.修饰常引用。
5.修饰常指针:const int * const a=&b;
6.修饰函数的常参数。
7.修饰函数的返回值:const int fun();
8.修饰类的成员函数:class A{ int fun()const;} fun不能修改类或者对象的属性。
9.在另一个连接文件中引用const常量:extern const int a;
引申2:什么是常引用:
是为了避免使用变量时,不知情的情况下修改了变量。常引用主要定义了一个普通变量的只读属性别名。
主要用途:1.只读属性别名。 2.函数的形参。
注意:1.如果是对一个常量进行引用,编译器会首先建立一个临时变量,将常量值置入临时变量(个人感觉成为幕后变量更合适),对引用的操作就是对这个临时变量操作。
2.引用初始化,非const引用只能用同类型非const左值进行初始化,而右值可以初始化const引用,过程为先建立一个临时对象存储右值,再用临时对象初始化const引用
3.在函数的引用型参数中,能被定义为const尽量定义为const,因为const引用可以用字面值初始化。