本篇主要寫給對const語法理解存在誤區的c++學習者,希望所有對這方面比較模糊的朋友可以閱讀並從中找到一些答案。 。 2004-11-19 21:00 const 最早想法是用於取代預處理器#define 這個巨集,從而形成常量的概念。針對常量const物件,const指標及指向const的指標,函式const型別引數,const 函式返回型別, const類成員,及const成員函式,及對const最後理解的一些總結來描述 const。 ① const物件和const型別的物件 對於這兩個概念的描述如下 1. int const object; //object是乙個const量是不可以被修改 object = 2;error 2. const int object; //object是 const int型他所存放的內容不可以被修改 對於1,2這兩種const用於物件,表述雖然不同但是效果是一樣的。因為物件本身存放著內容對物件的改變就是對於物件內容的改變,同樣改變後者也是在改變前者。所以語義上一樣的。 ② const指標 和 指向const的指標 及兩者結合 對於三個概念描述如下 1. int* const p; //指標p是const不能被修改 例如p++; //修改p本身會error //修改p指向內容 *p = 2; //ok
2. const int* p; //p是指向乙個
整形常量的指標指向的內容不可以改變 p++;//ok
// *p = 2; //error 3. const int* const p; //指標p本身是不能被修改並且p所有有效的內容也不能被 //修改 *p = 2; error 和 p++; error ③ const 引數修飾 和 引數返回型別的const修飾 1.const 引數修飾 此時函式引數修飾 const的具體用法 ① ②中用法是一樣的 例如 void fun( const int i ) //error不能修改常量i 2.const修飾函式返回型別用法也是類似於 ①②中,僅僅修飾的物件變化變成乙個返回物件 例如:const int fun() int res = (fun())++ //error不能修改常量返回物件 ④ const類成員 和 const 成員函式 1. const成員
類const成員在構造期間會允許被初始化並且在以後不能被改變。
我們就 可以知道類const成員和一般const 變數是有所不同的,類const成員是對應於每個物件而言才有意義。因為他在構造期被初始化,只有當類例項化後才會進行構造。所以類const成員可以這 樣描述: 在類的每一次例項化時被初始化,在這個物件的生存週期中不可改變。
2. const 成員函式
描述: void class::memberfun() const {}; //此時這個const修飾的this所有類成員變數都不允許在這個函式體作用後被修改。這在
設計上會帶來一些好處,能防止你意外的處理帶來的問題。
總結: <1> const 常量 一般編譯器不會分配空間只是維護一張表。而當extern 外部引用這個常量或者「&」對這個常量取位址時,編譯器才會為其分配位址。const本身的機制比較複雜。 <2> const 記憶法則 const修飾後面乙個最近的名稱。我曾初學的時候被const 修飾搞的糊里糊塗,後來慢慢的總結我覺得這樣理解最容易的。 例子: const int i; 此時const僅僅修飾int 表明 i不是乙個常量但是i的內容是常量。因為c/c++表達 對i的改變就是對i內容的改變所以 i也類似乙個const。大家不妨可以用指標const修飾試試理解會有幫助的我想。 <3> 對於所有非const 型別可以無條件轉化為 const型別,但是後者不能自動轉化為前者除非顯式的強制轉化去掉const性。這樣做是有意義的,因為const型別是非const的乙個子集是一種 特殊,由普遍轉化為特殊是合理的,就象模板特化,繼承的向上對映都是有意義的。 <4> 記住所有const修飾的內容並不是永遠不可改變,如果人為的強制轉化編譯器是不會提醒的。因為它沒有義務這麼做,所以我們對其轉化時要小心。 <5> 在const類成員函式處理時,我們引入了mutable修飾類成員變數,經過其修飾的成員變數可以在const類成員函式中被修改,編譯器是允許的。而 其他未被mutable修飾的成員還是按照const規則不能在const成員函式中被改變。 《結束》
VC 語法理解
1 tchar char和cstring之間的轉換 tchar是mfc中對char的封裝,當字符集是unicode時是雙位元組wchar,在其他字符集下為單位元組char。widechartomultibyte 函式功能 該函式對映乙個unicode字串到乙個多位元組字串。函式原型 int wide...
Xpath 語法理解(parsel)
xpath 理解 在 html xhtml 文件資訊查詢資訊 import parsel pip install parsel 進行安裝 當前為字串型別 str html str 轉換資料型別 將字串 轉化為 selector 物件 data parsel.selector html str 加上 ...
ruby on rails 學習筆記1 語法理解)
陣列和 range 可以響應的方法中有很多都可以跟著乙個塊 block 1.5 each 這個 在 range 1.5 上呼叫了each方法,然後又把這個塊傳遞給each方法。i 兩邊的豎槓在 ruby 句法中是用來定義塊變數的。只有這個方法才知道如何處理後面跟著的塊。本例中,range 的each...