一 引入
说到const,是从c的预处理#define而来的,其最初动机为取代#define来进行值替代。从这以后在c++中它就可以用于修饰指针等。
二 值替代
在c/c++中#define一个数,编译器不为它分配内存,不进行类型检查,仅仅做了些文本替换。那么const呢?也是如此吗?(以下仅仅讨论在c++中)
默认的情况下,const 一个变量并定义它(如const int i=1;)编译器不为它分配内存,仅仅把值放在符号表中,而且此常量仅仅只能在定义它的文件中可见(也可以理解为在其它文件中不能使用它,即不能通过extern来使用它,因为它没分配到内存)。那么我要为它分配它内存呢?可以通过extern关键字,即可以extern const int i=1;这样在其他文件也来访问i了。
三 const数组
const数字仅仅意味着‘不能改变的一块存储空间’,而编译器不知道存储的内容是什么,所以下列代码不能通过。
const int a[]={1,2,3};
double d(a[1]);//非法的
而
const int i=2;
double d[2];是正确的;
四 const指针
这个不多说了。
五 const返回值
对于内置类型,const返回值没什么意义。
对于用户自定义的类型,const返回值才有意义。既可以说明它是否可以为左值。
六 类中的const
const数据成员。如
class x{const int i;public:x(int ii):i(ii){}};这个说明const的数据成员必须在构造函数的初始化表中初始化。
const 成员函数。
void f() const;说明这个成员函数不能修改内部数据成员。