第二章 變數和基本型別 2 5處理型別

2021-10-18 04:03:42 字數 2616 閱讀 8705

型別別名是乙個名字,它是某種型別的同義詞,有兩種方法可用於定義型別別名:

指標、常量和型別別名

typedef

char

*pstring;

// psting 等價於 char*

const pstring cstr =0;

// cstr 是乙個常量指標

const pstring *ps;

// ps 是指標,它指向的是乙個 char 型的常量指標

注意,上述**中宣告語句的基本資料型別都是const pstringconst是對給定型別的修飾,因此const pstring就是指向char的常量指標,而非指向常量字元的指標。

遇到了一條使用了型別別名的宣告語句時,人們往往會錯誤地嘗試把型別別名替換成它本來的樣子,以理解該語句的含義如

const pstring cstr =0;

const

char

*cstr =0;

// 是對 const psting cstr 的錯誤理解

這種理解是錯誤的。宣告語句中用到pstring時,其基本資料型別是指標,可是用char*重寫宣告語句後,資料型別就變成了char*成為了宣告符的一部分。前後兩種宣告的含義截然不同,前者宣告了乙個指向char的常量指標,改寫後的形式宣告成了乙個指向const char的指標。

auto讓編譯器通過初始值來推算變數的型別,採用auto定義的變數必須有初始值。

使用auto也能在一條語句中宣告多個變數。因為一條宣告語句只能有乙個基本資料型別,所以該語句中所有變數的初始基本資料型別都必須一樣。

復合型別、常量和 auto

編譯器推斷出的auto型別有時候和初始值的型別並不完全一致,編譯器會適當地改變結果型別使其更復合初始化規則。

切記:符號&*只從屬於某個宣告符,而非基本資料型別的一部分,因此初始值必須是同一種型別。

decltype 型別指示符

decltype的作用是選擇並返回運算元的型別說明,在此過程中,編譯器分析表示式並得到它的型別,卻不實際計算表示式的值

decltype(f

()) sum = x;

// sum 的型別就是函式 f() 的返回型別

decltypeauto處理頂層 const 和引用的方式有些許不同。如果decltype使用的表示式是乙個變數,則decltype返回該變數的型別(包括頂層 const 和引用在內)

const

int ci =0,

&j = ci;

decltype

(ci) x =0;

// x 的型別是 const int

decltype

(cj) j = x;

// j 的型別是 const int&

decltype

(cj) z;

// 錯誤, z 的型別是 const int&,必須要有初始值

decltype 和引用

如果decltype使用的表示式不是乙個變數,則decltype返回表示式結果對應的型別。當表示式返回的乙個引用型別時,意味著可以該表示式的結果物件能作為一條賦值語句的左值

int i =42,

*p =

&i,&r = i;

decltype

(r +

0) b;

// 正確:加法的結果是 int,所以 b 的型別是 int

decltype

(*p) c;

// 錯誤:解引用的結果是 &,所以 c 的型別是 int&,必須初始化

對於decltype所用的表示式來說,如果變數名加上了一對括號,則得到的型別與不加括號時會有不同。

如果decltype使用的是乙個不加括號的變數,則得到的結果就是該變數的型別;

如果給變數名加上了括號,得到的結果是引用型別

decltype

((i)

) d;

// 錯誤:d 的型別是 int&,必須初始化

decltype

(i) e;

// 正確:

切記:decltype((variable))的結果永遠是引用,decltype(variable)的結果僅當variable的型別是引用才是引用。

第二章 變數和基本型別

第二章 變數和基本型別 1 基本內建型別 1 有效數字 float 6位 double 10位 2 符號位 使用一位符號位的表示方式的8位signed整型取值是 128到127 3 越界賦值 取值數目求模 2 字面值常量 1 無符號長整型 1024ul 2 字串 自動在末尾新增乙個空字元 3 變數 ...

第二章 變數和基本型別

識別符號 運算子 宣告符 2.3 復合型別 基於其他型別定義的型別 1.引用 定義引用時,程式把引用和它的初始值繫結 bind 在一起,而不是將初始值拷貝給引用。一旦初始化完成,引用將和他的初始值一直繫結在一起,所以無法令引用重新繫結到另外乙個物件,所以引用必須初始化 2.指標 指標本身是乙個物件,...

第二章 變數和基本型別

切勿混用帶符號數和無符號數 include using namespace std int main 輸出的結果一直都是no,所以不可混用,請注意size 返回的是size type型別,而該型別也是unsigned的。只有內建型別存在字面值,字面值常量的值是不能修改的 它存放在 段中 內建型別的全...