1.指針常量,是表明該指針是一個常量,該指針不能再指向其他地址。其表示形式是 int *const p; 常量指針,是表明該是指向常量的指針,這個地址中的值是不能改變的。其表示形式是const int *p; 或 int const *p; 。也就是const離誰近誰就無法改變,也可以記爲:指針是常量,常量的指針。
下面例子:
#include <iostream>
using namespace std;
int main(int argc, char *args[])
{
int *b = new int[2];
int *c = new int[2];
int * const * const a = &b;
a = &c;//錯誤,是因爲第一層指針和第二層指針都是指針常量
return 0;
}
2.對於const int * const (* const func)() const {} 函數,第一個const表示返回指針指向值不可修改,第二個表示返回的int型的指針不可修改,第三個表示指向函數名(本身也是一個指針常量)的指針(即第二層指針)也是不可以修改的。最後一個與前三個意義相差較大,表示這個函數不能改變類內成員的(只有類內成員函數可以修飾)。
3.引用不具備上面的特性,const int &p2 = p1; 或 int const &p2 = p1; 表示其值無法改變。但int & const p2 = p1; 語法錯誤,是因爲引用就是一個別名,指向一個對象時就無法再指向其他,本身就有常量的性質。再用int & const p2 = p1;標註是語法錯誤。