天天看點

C++ 類型聲明

類型别名

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&
           

繼續閱讀