一、非const对象可以初始化const对象
int i=0; const int ci=i;因为它们使用各自的存储单元。
二、非const引用与const引用
1、const引用可以用常量、表达式、const对象或非const对象初始化
int i=0;const int &refi=i;
尽管i与refi使用同一单元,但i为非const,可以通过i改变此单元的值;而refi为const,不能通过refi改变此单元的值。
2、非const引用不能用const对象初始化
const int i=0;int &refi=i;
因为i为const,现在又希望通过refi改变i的值,与i的原定义矛盾。
第二点对于函数参数非常有意义:
函数参数为const引用,对应实参可以为常量、表达式、const对象或非const对象;
函数参数为非const引用,对应实参只能为非const对象。
三、指针与const
1、指向const对象的指针
const int *p; p可以指向const对象,也可指向非const对象。但都不能通过*p改变p所指向的对象。
2、const指针
int i=0;int* const pi=&i;
pi不能再指向别的对象,但可以通过*pi改变i的值。
3、指向const对象的const指针
const int i=0;
const int* const pi=&i;
四、定义与声明
C++规定一个程序中同一个名字只能定义一次,可以声明多次。但有例外。
在不同的文件中,以下三种可以多次定义,但必须保证定义相同。
1、类型;
2、常量;
3、inline函数。