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&
相關文章
- DOCTYPE宣告三種型別型別
- drools的型別宣告(Type declarations)型別
- PHP 7 標量型別宣告 RFCPHP型別
- C++ 提示未宣告的識別符號C++符號
- TypeScript 中的非基礎型別宣告TypeScript型別
- C++typedef宣告,enum列舉型別C++型別
- vue3的defineEmitsi型別宣告註解VueMIT型別
- 【C++】C++之型別轉換C++型別
- C++型別轉換C++型別
- C++資料型別C++資料型別
- c++ 型別轉換C++型別
- C++型別推導C++型別
- 【C++】資料型別-列舉型C++資料型別
- C++基本資料型別及型別轉換C++資料型別
- C++ 引用型別簡介C++型別
- c++基本型別筆記C++型別筆記
- c++中變數型別C++變數型別
- C++引用型別詳解C++型別
- C++ 資料算數型別C++型別
- C++型別引數化C++型別
- C++ 常型別轉換C++型別
- 原始碼 | 靜態工廠返回宣告的返回型別的子型別的例項原始碼型別
- PHP學習筆記4:標量型別的宣告PHP筆記型別
- C++ 宣告與定義C++
- c++基本型別和變數C++型別變數
- C++ 列舉型別介紹C++型別
- C++檢視資料型別C++資料型別
- C++ 變數型別查詢C++變數型別
- c/c++ 模板 型別推斷C++型別
- C++強制型別轉換C++型別
- C++中變數的型別C++變數型別
- 關於C++列舉型別C++型別
- 再談c++型別轉換C++型別
- C++ string型別常用操作C++型別
- C++ 動態型別轉換C++型別
- c#如何宣告資料結構型別為null?C#資料結構型別Null
- TypeScript魔法堂:函式型別宣告其實很複雜TypeScript函式型別
- C++霧中風景番外篇:理解C++的複雜宣告與宣告解析C++