常类型是指使用类型修饰符co t说明的类型,常类型的变量或对象的值是不能被更新的。因此,定义或说明常类型时必须进行初始化。
一般常量和对象常量
1. 一般常量
一般常量是指简单类型的常量。这种常量在定义时,修饰符co t可以用在类型说明符前,也可以用在类型说明符后。如:
int co t x=2;
或
co t int x=2;
定义或说明一个常数组可采用如下格式:
<类型说明符> co t <数组名>[<大小>]…
或者
co t <类型说明符> <数组名>[<大小>]…
例如:
int co t a[5]={1, 2, 3, 4, 5};
2. 常对象
常对象是指对象常量,定义格式如下:
<类名> co t <对象名>
或者
co t <类名> <对象名>
定义常对象时,同样要进行初始化,并且该对象不能再被更新,修饰符co t可以放在类名后面,也可以放在类名前面。
常指针和常引用
1. 常指针
使用co t修饰指针时,由于co t的位置不同,而含意不同。下面举两个例子,说明它们的区别。
下面定义的一个指向字符串的常量指针:
char * co t prt1 = stringprt1;
其中,ptr1是一个常量指针。因此,下面赋值是非法的。
ptr1 = stringprt2;
而下面的赋值是合法的:
*ptr1 = "m";
因为指针ptr1所指向的变量是可以更新的,不可更新的是常量指针ptr1所指的方向(别的字符串)。
下面定义了一个指向字符串常量的指针:
co t * ptr2 = stringprt1;
其中,ptr2是一个指向字符串常量的指针。ptr2所指向的字符串不能更新的,而ptr2是可以更新的。因此,
*ptr2 = "x";
是非法的,而:
ptr2 = stringptr2;
是合法的。
所以,在使用co t修饰指针时,应该注意co t的位置。定义一个指向字符串的指针常量和定义一个指向字符串常量的指针时,co t修饰符的位置不同,前者co t放在*和指针名之间,后者co t放在类型说明符前。
2. 常引用
使用co t修饰符也可以说明引用,被说明的引用为常引用,该引用所引用的对象不能被更新。其定义格式如下:
co t <类型说明符> &am <引用名>
例如:
co t double &am v;
在实际应用中,常指针和常引用往往用来作函数的形参,这样的参数称为常参数。
在C++面向对象的程序设计中,指针和引用使用得较多,其中使用co t修饰的常指针和常引用用得更多。使用常参数则表明该函数不会更新某个参数所指向或所引用的对象,这样,在参数传递过程中就不需要执行拷贝初始化构造函数,这将会改善程序的运行效率。
下面举一例子说明常指针作函数参数的作法。
#include
co t int N = 6;
void print(co t int *p, int n);
void main()
{
int array[N];
for (int i=0; i< i++)
ci gt gt;array[i];
print(array, N);
}
void print(co t int *p, int n)
{
cout< lt;"{"< lt;*
for (int i=1; i< i++)
cout< lt;","< lt;*(p+i);
cout< lt;"}"<


