const 是C/C++ 中的关键字,因为使用方法繁多,总结如下:
一、const 限定变量
1.1 const 修饰普通变量
说明:const 在C 常用于限定变量值不可改变,这也是const 最常用法。
1: const int value = 1; //value为1 且值不可变
2: int const value = 1; //同上
3: const int* pi = &value; //指针pi 可变,*pi 不可变
4: *pi = 0 //False
5: pi = &new_value //True
6: int* const pi = &value; //指针pi 不可变,*pi 可变
7: pi = &value2 //False
8: extern const int i; //合法
9: extern const int j = 10; //不合法,常量不可再被赋值
#define 也可以用于定义常量,和const 不同在于:系统对#define 定义的常量每遇到一次都分配一次内存,对const 定义的常量只分配一次内存,extern const 可用于应用其他文件变量,且并被改变。需要注意的是下面程序是正确的,虽然变量i 定义为const 类型,但通过指针可以改变i 的值。
1: const int i = 0;
2: int *pi = &i;
3: *pi = 1;
1.2 const 修饰函数参数
说明:const 用于函数传入参数前可以起到限定检查的作用,该参数在该函数内不得被修改:
1: void function(const int val) //val为在函数中不被修改
2: void function(const int* pv) //指针pv 指向的内容在函数中不被修改
在传递参数的情况下const 常和引用& 一起使用,更加有效,相当于将原来参数地址直接传递过去,而不用做像上面的拷贝工作。
1: void function(const int& val) //val为在函数中不被修改
2: void function(const int*& pv) //指针pv 指向的内容在函数中不被修改
1.3 const 修饰返回参数
说明:const 用于修饰函数返回值的情况不多,一般用于函数重载。
二、const 限定函数
说明:const 限定函数通过 function(…)const 来使用,表示该函数不修改类的成员参数。仅用于修饰类的成员函数,不能用于普通函数和类的构造函数。关于const 函数有个简单规律:
- const 函数总能够被调用
- 而非const 函数只能被非const 变量调用
这也说明了为什么鼓励大家将函数设置为const 类型了。
三、const 限定类对象、对象指针和对象引用
说明:const 限定类对象、对象指针和对象引用表示该类的成员不能修改,其成员函数必须都为const 类型,否则就有可能修改成员变量。
四、const 限定迭代器(iterater)
说明:const 修饰迭代器(iterater)只需要在之前加上‘const_’即可,要求该迭代器不修改容器中值。
1: typedef map<string, string>::iterator mapi;
2: typedef map<string, string>::const_iterator mapci;