常類型是指使用類型修飾符const說明的類型,常類型的變量或?qū)ο蟮闹凳遣荒鼙桓碌?。因此,定義或說明常類型時必須進(jìn)行初始化。
一般常量和對象常量
1. 一般常量
一般常量是指簡單類型的常量。這種常量在定義時,修飾符const可以用在類型說明符前,也可以用在類型說明符后。如:
int const x=2;
或
const int x=2;
定義或說明一個常數(shù)組可采用如下格式:
<類型說明符> const <數(shù)組名>[<大小>]…
或者
const <類型說明符> <數(shù)組名>[<大小>]…
例如:
int const a[5]={1, 2, 3, 4, 5};
2. 常對象
常對象是指對象常量,定義格式如下:
<類名> const <對象名>
或者
const <類名> <對象名>
定義常對象時,同樣要進(jìn)行初始化,并且該對象不能再被更新,修飾符const可以放在類名后面,也可以放在類名前面。
常指針和常引用
1. 常指針
使用const修飾指針時,由于const的位置不同,而含意不同。下面舉兩個例子,說明它們的區(qū)別。
下面定義的一個指向字符串的常量指針:
char * const prt1 = stringprt1;
其中,ptr1是一個常量指針。因此,下面賦值是非法的。
ptr1 = stringprt2;
而下面的賦值是合法的:
*ptr1 = "m";
因為指針ptr1所指向的變量是可以更新的,不可更新的是常量指針ptr1所指的方向(別的字符串)。
下面定義了一個指向字符串常量的指針:
const * ptr2 = stringprt1;
其中,ptr2是一個指向字符串常量的指針。ptr2所指向的字符串不能更新的,而ptr2是可以更新的。因此,
*ptr2 = "x";
是非法的,而:
ptr2 = stringptr2;
是合法的。
所以,在使用const修飾指針時,應(yīng)該注意const的位置。定義一個指向字符串的指針常量和定義一個指向字符串常量的指針時,const修飾符的位置不同,前者const放在*和指針名之間,后者const放在類型說明符前。
一般常量和對象常量
1. 一般常量
一般常量是指簡單類型的常量。這種常量在定義時,修飾符const可以用在類型說明符前,也可以用在類型說明符后。如:
int const x=2;
或
const int x=2;
定義或說明一個常數(shù)組可采用如下格式:
<類型說明符> const <數(shù)組名>[<大小>]…
或者
const <類型說明符> <數(shù)組名>[<大小>]…
例如:
int const a[5]={1, 2, 3, 4, 5};
2. 常對象
常對象是指對象常量,定義格式如下:
<類名> const <對象名>
或者
const <類名> <對象名>
定義常對象時,同樣要進(jìn)行初始化,并且該對象不能再被更新,修飾符const可以放在類名后面,也可以放在類名前面。
常指針和常引用
1. 常指針
使用const修飾指針時,由于const的位置不同,而含意不同。下面舉兩個例子,說明它們的區(qū)別。
下面定義的一個指向字符串的常量指針:
char * const prt1 = stringprt1;
其中,ptr1是一個常量指針。因此,下面賦值是非法的。
ptr1 = stringprt2;
而下面的賦值是合法的:
*ptr1 = "m";
因為指針ptr1所指向的變量是可以更新的,不可更新的是常量指針ptr1所指的方向(別的字符串)。
下面定義了一個指向字符串常量的指針:
const * ptr2 = stringprt1;
其中,ptr2是一個指向字符串常量的指針。ptr2所指向的字符串不能更新的,而ptr2是可以更新的。因此,
*ptr2 = "x";
是非法的,而:
ptr2 = stringptr2;
是合法的。
所以,在使用const修飾指針時,應(yīng)該注意const的位置。定義一個指向字符串的指針常量和定義一個指向字符串常量的指針時,const修飾符的位置不同,前者const放在*和指針名之間,后者const放在類型說明符前。

