1.
定義變數的小習慣:
定義變數時要養成初始化的好習慣,尤其是對指標變數。初始化時盡量用變數後加括號的形式進行初始化。這與用「
=」進行初始化有細微的區別。用「
=」進行初始化時,系統預設呼叫的是拷貝建構函式,而在變數後面加上括號的形式進行初始化時,系統預設呼叫的建構函式。對於
c++基本資料型別來說,這並無大的區別,然而對於物件來說卻有可能達不到我們想要的效果。
例:intx = 0;
拷貝式初始化
intx(0);
構造式初始化
雖然這個細節對於程式設計來說無傷大雅,但對於乙個優秀的程式設計師來說,養成乙個良好的程式設計習慣是必須的。參考文獻(
c++primer
)。2.
多返回值情況:
個人總結出兩種讓函式有多返回值的方法。第一種即為函式返回值為陣列或向量,或其他類似結構,都可實現多返回值。第二種則為設定引用引數,這點位本人個人觀點,可能表達上有些錯誤,敬請見諒;詳細的說就是利用引用引數而代替函式的返回值,當我們需要乙個函式返回乙個布林型別的值並且需要函式對某些資料進行修改時,這種方法很有用處;或許這不能說是函式多返回值,只是個人覺得這樣理解比較好懂。
3.利用多個布林型別以及整形的乘積的和判斷事件發生情況:
打個比方,求乙個數被
3,5,7
整除的情況,要求一次性輸出結果。則可以判斷是否能被
3,5,7
整除並將返回的布林數與
1,2,3
相乘,再相加,每種不同的情況將有不同的結果,這時我們則可以採用
switch
語句進行簡單的判斷即可達到一次性輸出的目的。
4.養成使用內聯函式的習慣:
內聯函式是
c++對於
c的巨集定義的替代品,對於用
inline
生命的函式,編譯器將嘗試將函式編譯到函式被呼叫的地方,從而省去了函式呼叫的麻煩。
inline
函式要求不可以有複雜的控制結構,迴圈等都是不允許出現在內聯函式中的。換一種說法就是,如果函式中有過於複雜的控制結構,編譯器將放棄對其內聯的嘗試。關鍵字
inline
對於編譯器來說只是一種建議,而編譯器是可以不去執行的。在類中我們可以把一些常用到的數量不多的**分離出來定義成內聯函式,從而減輕我們程式設計的複雜度。
5.指標的威脅:
有人說指標是安全隱患的罪魁或有,也有人說妙就秒在指標。對於這兩種說法,我個人更偏向於後一種。指標是有著強大功能的資料型別,雖然因為它而產生了好多安全隱患,但作為程式設計師我們應該學會如何去避免這些問題的產生。
當我們定義乙個指標變數時,我們應盡可能的將其進行初始化。這一點在第一點中已經強調。對於為初始化的指標我們成為野指標,野指標對於程式來說是相當危險的,如果我們嘗試去使用乙個野指標,或刪除野指標所指向的記憶體空間時,都會發生嚴重的錯誤而導致程式停止執行或者其他嚴重的後果。
當我們釋放掉乙個動態申請的指標時,也應將指標值置為
null
(或為0
),這樣我們就無法對其進行操作了。
當我們用兩個或多個指標指向同一塊動態申請的記憶體空間時,應小心多次對同一片記憶體空間進行刪除。從程式的使用者的角度來講,發生這種情況時計算機會產生藍屏的現象並將出現錯誤的位址顯示在螢幕上。避免這種情況有兩種方法:第一,刪除動態儲存空間後將其他指標置空;第二,刪除動態儲存空間後將其他指標指向其他記憶體空間。
總之我們應該讓指標的指向在我們的把握之中才是解決指標威脅的最終方法。
例:int *x=new int();
int *y=new int();
int *p=x;
delete x;
p=null;//
或p=y;
有一些是個人總結出來的,可能有一些理解上的問題,敬請見諒。
C 記憶體管理個人見解
之前面試幾家公司,都有詢問過記憶體管理的問題,比如對堆疊的理解,比如記憶體洩露出現的原因以及解決方法等等,所以現在就根據自己所學的來總結下記憶體管理的問題,希望對大家有很好的用處 首先要知道記憶體的劃分的區域 1.棧 儲存區域性變數,比如乙個函式中的int i 然後出了這個函式就會釋放掉,對於出棧的...
第一節綜述
shader是什麼?shader是著色器。渲染流水線的概念?渲染流水線的工作任務在於由乙個三維場景出發,生成一張二維影象。渲染流程分為3個階段 應用階段 幾何階段 光柵化階段。1 應用階段 由cpu負責實現,由開發者主導。最重要的輸出是渲染所需的幾何資訊,即渲染圖元。這些渲染圖元傳遞給幾何階段。2 ...
第一節 熱機
一.熱機 內燃機是熱機的一種,以汽油或柴油為燃料 二.汽油機 練1.三.柴油機 練2.從能量轉化的角度看,一台四衝程內燃機在乙個迴圈中 1 哪個衝程存在著化學能轉化為內能的過程?2 哪個衝程存在著內能轉化為機械能的過程?3 哪個衝程具有很明顯的機械能轉化為內能的過程?練3.關於單缸四衝程內燃機,下列...