標籤:
小豬豬逆襲成博士之C++基礎篇(二)
const 、auto、 decltype
上一章我們介紹了一些常用的類型和常見的問題,下面再介紹一些學習的時候不是特別常用但是在實際工程中很有用的一些東西。
一、常量const
我們想要定義一種不能改變它的值的變數,我們就對這個變臉的類型加上限定符Const。
Const 對象必須要初始化,並且它一旦建立了就不能改變,所以Const變數是只能出現在等號的右邊的。
另外,在C11標準中會有一種Constexpr的類型來編譯器驗證變數的值是是否是一個常量運算式。所以當你認定一個變數是常量運算式的時候,就可以把它聲明成constexpr。這有個什麼好處呢,我們聲明const的時候就不知道這個初值到底是不是常量,但是聲明成constexpr的時候編譯器是會檢查一下的。
二、處理類型
當我們的程式越來越複雜的時候,就會出現兩種問題了,第一種是類型寫的比較麻煩,比如unsigned char *這種,可能你一次要寫好多遍;第二種是程式寫長了你根本就搞不清楚到底要什麼類型了。
解決第一個問題的方法就是做“類型別名”,就是起個別的名字。比如剛才的可以弄成:
typedef unsigned char * PUCHAR;
那PUCHAR就是unsigned char * 了。
第二個問題的解決方案就是在新的C11標準中有個auto的類型說明符,這種說明符可以幫你判斷到底是應該是個什麼類型的。例如:auto i=1;這個時候就知道i是個整數型,還有些類型不是很常見,特別是一些標註庫函數的傳回值可以用auto。
另外還有一種叫做decltype類型的指示符,用法是decltype(f()) sum=x; sum的類型是f()的類型。這兩種新的方法在這裡就不多說了,可以看看書,多用幾次就沒有問題了,當然不用的話除了麻煩好像也沒有什麼災難性問題。
三、自訂資料結構
當我們想自己定義一個資料類型並沒有想添加運算函數的時候可以聲明一個struct類型。下面就是個簡單的例子,注意這個花括弧後面的分好就好。
struct point{
int x;
int y;
};
struct point p;
另外,我們可能會自己編譯一個標頭檔,有些東西是只能聲明一次的,因此我們需要用到一種叫做標頭檔保護符。就是在編譯的時候看看這個標頭檔是不是已經定義過了,如果定義過了就不再重複了。這個是比較有用的,可以在每一個標頭檔裡面都寫上這句話:
#ifndef POINT_H
#define POINT_H
struct point{
int x;
int y;
};
/*標頭檔內容*/
#endif
小豬豬逆襲成博士之C++基礎篇(二) 常量、處理類型、自訂標頭檔