型別別名
兩種方式:(1)typedef (2)別名宣告using si = sales_item;
復合型別和型別別名
typedef char *pstring;
const pstring cstr = 0; //cstr是指向char的常量指標
const pstring *ps; //ps是乙個指標,它的物件是指向char的常量指標
注意:遇到一條使用了型別別名的宣告語句,不要把型別別名替換成他本來的樣子再去理解!如const pstring,這是指向char的常量指標,不是指向常量字元的指標!因為宣告語句中用到pstring時,基本資料型別是char*,但是用char*重寫了之後資料型別就變成了char。
auto型別說明符
c++11引入,目的是讓編譯器替我們去分析表示式所屬的型別。
auto定義的變數必須有初始值。
auto可以在一條語句中宣告多個變數,但是該語句中所有變數的初始基本資料型別必須都一樣。
auto i = 0, *p = &i;
auto sz = 0, pi = 3.14; //錯誤,sz和pi型別不一樣。因為前面是auto,所以不會進行型別轉換讓pi=3。如果auto換成int,這句話沒錯
引用被用作auto變數的初始值,那麼真正參與初始化的是他引用的物件的值。
auto一般會忽略掉頂層const,底層const會保留。
int i = 0, &r = i;
const int ci = i, &cr = ci;
auto b = ci; //b是整數,ci的const是頂層const,被忽略掉
auto c = cr; //c是整數,cr是引用,用引用作為初始值,真正參與初始化的是他引用的物件的值
auto d = &i; //d是乙個整型指標
auto e = &ci; //e是指向整數常量的指標,取位址是一種底層const,保留
auto型別正常不會是頂層const,除非明確指出:
const auto f = ci; //f是const int
定義auto的引用,頂層const仍然保留
auto &g = ci; //ci是整型常量引用
auto &h = 42; //錯誤,不能為非常量引用繫結字面值,常量引用可以繫結字面值
const auto &j = 42; //正確,常量引用可以繫結字面值
一條語句中可以定義多個變數,包括指標和引用,但是&和*只屬於某個宣告符,不是基本資料型別的一部分,因此初始值必須是同一種型別。
auto k = ci, &l = i;
auto &m = ci, *p = &ci;
auto &n = i, *p2 = &ci; //i的型別是int,ci的型別是const int
decltype型別指示符
decltype作用是選擇並返回運算元的資料型別。decltype(f()) sum = x; sum的型別就是函式f的返回型別。
decltype使用的表示式是乙個變數:
如果decltype使用的表示式是乙個變數,則decltype返回該變數的型別,包括頂層const和引用。
const int ci = 0, &cj = ci;
decltype(ci) x = 0; //x的型別是const int
decltype(cj) y = x; //y的型別是const int&
decltype(cj) z; //錯誤,z是引用,必須初始化
引用從來都作為其所指物件的同義詞出現,只有在decltype處是個例外。
decltype使用的表示式不是乙個變數:
如果decltype使用的表示式不是乙個變數,則decltype返回表示式結果對應的型別。如果該表示式的結果物件能作為一條賦值語句的左值,則decltype返回乙個引用型別。注意,把變數外面加上括號,將看做表示式。
int i = 42, *p = &i, &r = i;
decltype(r + 0) b; //r+0的結果的型別是int,所以b是乙個int
decltype(*p) c; //錯誤!c的型別是int&,必須初始化
decltype((i)) d; //錯誤!d是int&,必須初始化
decltype(i) e; //正確。e是乙個int
如果表示式的內容是解引用操作,則decltype將得到引用型別。所以decltype(*p)的型別是int& 而不是 int。
decltype((variable))的結果永遠是引用,而decltype(variable)的結果只有當variable本身就是乙個引用時才是引用。
Go No nil 型別別名
為型別起個別名,方便 編寫過程中使用。type alias ttype 關鍵字 alias 型別別名 t 型別 例如資料型別中提到的unicode字元型rune和ascii字元型byte就是型別別名 type rune int32 type byte uint8在 go 中有一些基本的資料型別,如s...
定義型別別名 typedef,using
說到型別別名,無非是給型別名 如int,char,float,double,bool 取乙個比較有特殊含義的名字而已 最常用的關鍵莫過於typedef吧 typedef最常見的用法是與結構體struct連用,這是c語言的語法,c 已經不這樣用了 或者很少這樣用 在c語言中宣告結構體常用以下格式 1 ...
C 學習筆記 型別別名
一 c 為型別建立別名的方式有兩種 1 使用預處理器 define byte char 預處理器將在編譯程式時用char替換所有的byte,從而使byte成為char的別名。2 使用c 關鍵字typedef來建立別名 typedef typename aliasname include typede...