類型别名
typedef關鍵字
typedef
關鍵字是繼承自C語言的特性,利用它我們可以為一個類型起别名,一般用于将複雜類型簡化。舉個簡單的例子,将
int
類型定義為
integer
類型,之後就可以在代碼中使用
integer
作為類型使用。
//typedef關鍵字
typedef int integer;
integer i = 5;
别名聲明
C++還新增了另一種聲明類型别名的方法,這就是别名聲明。
//别名聲明
using charater = char;
charater c = 'c';
auto關鍵字
使用
auto
關鍵字可以簡話類型聲明。當使用
auto
關鍵字是,變量的類型由編譯器自動推斷。
//auto關鍵字
auto number = 100;//number是int
auto pnumber = &number;//pnumber是int*
由于編譯器需要根據給定的初始值判斷變量的類型,是以
auto
類型的變量必須初始化。而且如果在一行聲明多個變量,那麼這些變量的類型必須相同。
auto ca = 'a', cb = 'b';
如果使用常量來初始化
auto
變量,那麼編譯器會忽略頂層const,保留底層const。是以在下面的例子中,
auto
變量和原變量的類型并不完全相同。
//忽略頂層const,保留底層const
const int cn = 100;
const int* pn = &cn;
auto cn2 = cn;//int
auto pn2 = pn;//const int*
decltype關鍵字
有時候可能需要根據表達式的類型來決定要使用的類型,在這種情況下可以使用C++新增的
decltype
關鍵字。在下面的例子中,由于
decltype
中的表達式類型不同,是以聲明的變量的類型也不同。
//decltype關鍵字
decltype(5 + 5) n1;//int
decltype(5 + 5.0) n2;//double
decltype
關鍵字可以接受的表達式類型很廣泛,甚至可以接受函數作為表達式,這時候會将函數的傳回值類型作為要使用的類型,注意編譯器不會真的調用這個函數,僅僅是分析它的傳回值而已。如果表達式是一個引用,那麼獲得的類型就是嚴格的這個引用的類型,包括頂層和底層const在内。
特别要注意的一點是,如果表達式本身使用括号包括,那麼這其實是一個引用類型,是以這時候的變量必須初始化。
//必須初始化
decltype((n2)) n3 = n2;//int&