C 入門教程(21) 型別推導和型別提取

2021-09-13 22:23:56 字數 1788 閱讀 8241

寫c++**時,經常遇到特別長的資料型別,由於這個原因,c++新增型別推導功能auto

用法:

auto a = 0;
型別推導,就是由編譯器在編譯期推導出=右邊的資料型別,為=左邊的變數決定資料型別。例如上面例子,0預設是int型別,那麼變數a的資料型別就是int

有時候,不能使用型別推導但還是要用某個變數的型別作為新變數的型別,這個時候就可以用關鍵字deltype

型別提取經常與模板配合使用,模板是c++的利器,將在後續講解。

用法:

auto a = 0;

decltype(a) b = 10;

從變數a中提取出資料型別,即int,然後作為變數b的資料型別,所以變數b的資料型別也是int

當使用vs和vs code的時候,用滑鼠指著變數,將可以看到變數的資料型別。

舉個完整的**例子:

#include // std::cout std::endl std::boolalpha

#include // std::is_same

int main(void)

輸出結果:

value的型別是不是const unsigned long?true
由於0ulunsigned long的型別,然後再配乙個const關鍵字,所以變數value的型別就是const unsigned long

const auto value = 0ul;
std::is_same可以用來判斷兩個資料型別是不是一樣,用法如下:

std::is_same《資料型別1, 資料型別2>::value
當兩個資料型別相同時,上面的值就是true;當兩個資料型別不相同時,上面的值就是false

使用decltype提取出變數value的資料型別:decltype(value),然後和const unsigned long進行比較,最後輸出結果是true,證明變數value的資料型別就是const unsigned long

另外,std::is_same使用前需要引入type_traits標準庫。

關鍵字auto很久以前,只要宣告變數都要在資料型別前面新增auto。事實上,很久以前就可以不加,auto相當乙個沒用的關鍵字。所以從c++11起,廢棄了這個沒用的功能。

從c++11起,關鍵字auto被賦予型別推導的功能。

關鍵字decltype從c++11開始加入。

c 11 型別推導

auto與decltype都是在編譯時期進行自動型別的推導 auto name value 1.int x 0 2.auto p1 x p1 為 int auto 推導為 int 3.auto p2 x p2 為 int auto 推導為 int 4.auto r1 x r1 為 int auto ...

C 11 型別推導auto

在c 11之前,auto關鍵字用來指定儲存期。在新標準中,它的功能變為型別推斷。auto現在成了乙個型別的佔位符,通知編譯器去根據初始化 推斷所宣告變數的真實型別。使用auto會拖慢c 效率嗎?完全不會,因為在編譯階段編譯器已經幫程式設計師推導好了變數的型別。使用auto會拖累c 編譯效率嗎?完全不...

C 中Traits技術 4 型別推導

繼續理解traits技術。當我們處理原生指標時,會遇到需要知道其所指物件型別這樣的問題。如何實現呢?template void testtypeforward t t c 中我們不允許使用typedef t 這樣的語句。其中的一種解決方案是 將這個功能實現傳遞給另乙個函式去完成。template v...