C 型別處理

2021-09-01 06:34:00 字數 2485 閱讀 8378

引用本身不是乙個物件,所以不能定義指向引用的指標,但指標是物件,所以存在指標的引用。

可以通過從右往左理解為什麼p是乙個指標的引用,p的左邊是引用符號,因此p是乙個引用,其餘部分表示p引用的是乙個int指標。

int

main()

頂層const表示指標本身是乙個常量,底層const表示指向的物件是乙個常量。

int

main

(void

)

有兩種方式可以定義型別別名typedef和using。

typedef

int xyint;

//xyint是int的型別別名

typedef

int*pxyint;

//pxyint是int*的型別別名

using xydouble =

double

;//xydouble是double的型別別名

using pxydouble =

double*;

//pxydouble是double*的型別別名

intmain

(void

)

它們之間的區別是typedef不能為模板類設定型別別名。

template 

typedef std:

:vector vtype;

//錯誤

template

using vtype = std:

:vector

;//正確

如果型別別名指代的是指標型別,然後用const修飾的時候會產生意想不到的後果,例如下面的const pxyint,實際上指的是指向乙個int的常量指標,原因是型別別名不是直接替換的,這個時候應該把pxyint看做乙個整體。

typedef

int*pxyint;

using pxydouble =

double*;

intmain

(void

)

pxyint如果是用#define定義的話,const pxyint就是乙個底層const了。

#define pxyint int * 

intmain

(void

)

有時候根本不知道乙個表示式的型別,或者很難做到,c++11引入了auto型別說明符,讓編譯器自動去分析表示式的型別,所以auto定義的變數必須要有乙個初始值。

int

main

(void

)

和型別別名一樣,auto型別為指標型別時用const修飾會得到乙個頂層const,而不是底層const。

int

main

(void

)

使用auto定義多個變數時,型別必須一樣。

int

main

(void

)

引用型別作為初始值時,auto推斷出來的型別為引用物件的型別,如果希望推斷出來的是乙個引用,需要明確指出。

int

main

(void

)

auto會忽略頂層const,保留底層const,如果希望推斷出來的是乙個頂層const,需要明確指出。

int

main

(void

)

設定乙個型別為auto的引用時,初始值中的頂層const將會保留。

int

main

(void

)

有時候我們想使用表示式推斷出來的型別,但是不想呼叫這個表示式,c++11引入了decltype型別指示符滿足這一要求,它的作用是返回表示式的資料型別,但是不會呼叫這個表示式。

int

main

(void

)

和auto不一樣, decltype不會忽略表示式的頂層const和引用。

int

main

(void

)

如果decltype表示式內容是指標的解引用操作,那麼結果會是乙個引用。

int

main

(void

)

decltype表示式如果是雙層括號,那麼結果永遠是引用,必須初始化。

int

main

(void

)

我們還可以利用標準型別轉換模板從乙個引用獲取非引用型別。

int

main()

C 型別處理 typedef decltype

型別別名是某種型別的同義詞 有兩種方法用於定義型別別名,傳統方法是使用typedef typedef double wages wages是double的同義詞 typedef wages base,p base是double的同義詞,p是double 的同義詞新標準規定了一種新的方法,使用別名宣告...

C 動態資料型別處理

通過反射獲取物件後動態對屬性賦值,由於欄位為不同的資料型別,所以要根據欄位的型別進行賦值。方法1.網上常見的根據datatype寫很多ifelse的 方法2 利用convert.changetype方法,根據當前欄位的資料型別動態轉換賦值 object obj1 convert.changetype...

c (13)處理型別 型別別名

型別別名 是乙個名字,它是某種型別的同義詞。使用型別別名的好處 它讓複雜的型別名字變的簡單明瞭,易於理解和使用,還有助於程式設計師清楚的知道使用該型別的真實目的。有兩種方法可以定義型別別名 1.傳統的方法是使用關鍵字typedef typedef double d d是double的同義詞 type...