引用本身不是乙個物件,所以不能定義指向引用的指標,但指標是物件,所以存在指標的引用。
可以通過從右往左理解為什麼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...