const是用来限定所指定的变量或者函数不可作修改。
1)修饰变量
当const用来修饰变量的时候,const所指定部分不可修改。
a. 修饰常规变量
如:const int a = 10;
int const a = 10; // 这两种方式的效果一样,都是将a描述为常量,a的值在被赋初值后不可以修改。
但是这和由宏定义的常量(如:#define N 10)又有所区别,前者的常量是有类型的,而由宏定义的没有类型。而且,前者在使用过程中,只会产生一个副本,但是宏定义的会有多个副本。
b.修饰带*的变量
如:1、 int const *a; //修饰的是(*a),则表示a所指的变量的内容不可变。
2、int * const a; // 修饰的是a,则表示a不可变,即a只能指向初始指向的内存单元。
3、const int * a ; //a和*a均不可变,即不可作为左值。
2)修饰函数
a.修饰函数参数
如:void f(const int a); //a在该函数中不可被修改(虽然如此规定,但是a的修改在这里本身就不会修改实参的值),且可以传递常量
void f(const int & a); //可以保证引用不被修改
b. 放于函数名前,表示返回值不可被修改。无意义。
c. 放于函数名后,此时只可修饰类成员函数。表示,该对象的数据成员不可被修改,且数据成员中的const数据只可被此类成员函数调用。
如:class A
{
private:
int a;
public:
void fun() const
{int b =a;//a不可作为左值}
}