1.當然最常用的還是作為常量。
(1)const int*p的用法,表示指向的值得型別不變還是int型,但p的值可以變,可以這樣理解「自以為指向const的指標」,可以將非const的物件賦值給他例如可以這樣:
int i=3;
int j=4;
const int*p;
p=&i;
cout<<*p<
p=&j;
cout<<*p<
這要另乙個單元的值是int型別就行,其值是可以改變的,我以為其值是不可以變得,但對當前的值是不能改變的,例如*p=3;是錯誤的。
(2)const指標,指指標不可以變,但它所指向的值是可以變得
如:int errnumb=0;
int *const curerr=&errnumb;currerr=currerr;//error
*currerr=9;//ok
(3)指向const物件的const指標
const double pi=9.3;
const double *const p_ptr=π
2.const能用做形參,表示傳過來的物件不能改變,在程式中經常能用的到
應該將不需要修改的引用定義為const引用,非const引用形參在使用時不放變,這樣的形參既不能用const物件,也不能用字面值或者產生右值的表示式實參初始化,加上速度更快,在不用改變實參的情況下應該用const的引用
3.有些類的成員函式是常函式,const可以用來做過載的標誌符
只要不是static的成員函式,都隱含的有乙個this指標,來引用呼叫它的物件,const成員函式的const隱含的改變了this形參的型別形式如下:const classname *const this;不能改變呼叫它的函式物件的資料成員,以前總是不知是怎麼回事,現在總算是知道了
4.有的引用可以作為const型別的例如const int& p;此時可以將常量和非常量賦值給它,當將非常量賦值給它時,此時非常量也是不能改變的。此時的p可以用右值或者左值進行賦值,而對於int &p只能以此種型別的值進行賦值,而且不能用左值進行賦值。
5.const物件的動態陣列
在程式的自由儲存區建立內建型別的const物件時,必須為這個陣列提供初始化,實現的唯一方法:
const int *p=new const int[100];//error
const int *p=new const int[100]();//ok
對於類型別必須有類的預設建構函式才行
const string *p=new const string[100];// ok
6.可以將函式的返回型別定義成const型別的引用表示,返回的是物件本身,而且這種值是不能改變的,返回的左值,所以可以給非const的返回值賦值,是在是驚訝
7.關於const在過載中的作用
對於非const的形參,其實等價的,只是複製實參的副本,並沒有對實參產生實質的影響,然而對引用和指標,就不一樣了,其中的const可以作為過載的條件例如以下的兩個函式:
record lookup(account&);
record lookup(const account&);
當傳遞const物件時,只能用第二種形式,然而傳遞非const物件時理論上可以使用兩種函式,但是選擇的是第二種函式,第二種將會發生型別的轉換,而非const是精確的匹配。對於指標式同樣的道理
以下的函式的const不能作為函式過載的條件
f(int*);
f(int* const);
這與const變數和非const變數是同理,只是改變的是指標的副本
8.const物件定義在標頭檔案中的一些解釋
primer上面的p59,具體的還是看不懂,如果const變數不是用常量表示式初始化,那麼它就不應該在標頭檔案中定義,和其他的變數一樣,在標頭檔案中使用extern宣告,以使多個檔案共享,具體是什麼原因,不是很懂
9.下面的不是太懂
typedef string *pstring;
const pstring cstr;
書上面的解釋是typedef當成文字擴充套件了不是很懂,真是不懂???
C 中const的用法
1 const修飾普通變數和指標 1 const修飾普通變數 其寫法有2種 a const type value b type const value 這兩種寫法本質上是一樣的。其含義是 const修飾的型別為type的變數value是不可變的。2 const修飾指標 a const char va...
關於const的用法
在生活或工作中,對於一些檔案 程式或資料,需要設定對它們的讀寫許可權。在必要的時候,如果限定一些資料只具有 讀 的許可權,而不能對它們進行賦值或修改,這時,我們需要使用 const 對資料進行修飾。在對const進行解釋之前,先引入兩個名詞 左值 右值 左值 放在 賦值 符號左邊的就是左值。其他情況...
關於const的用法
1.const int p hello 這個意思就是這個指標變數p指向的內容不能改變,但是可以改變讓p指向其他的位址。const char p hello p ok printf s p 所以這個的執行結果就是ok,如果稍加修改 const char p hello p 0 o printf s p...