2 5型別別名,auto, decltype

2021-08-08 22:13:11 字數 2590 閱讀 2923

型別別名

兩種方式:(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...