寫C++代碼時,常常遇到特別長的數據類型,因爲這個緣由,C++新增類型推導功能auto
。ios
用法:code
auto a = 0;
類型推導,就是由編譯器在編譯期推導出=
右邊的數據類型,爲=
左邊的變量決定數據類型。例如上面例子,0
默認是int
類型,那麼變量a
的數據類型就是int
。編譯器
有時候,不能使用類型推導但仍是要用某個變量的類型做爲新變量的類型,這個時候就能夠用關鍵字deltype
。it
類型提取常常與模板配合使用,模板是C++的利器,將在後續講解。io
用法:編譯
auto a = 0; decltype(a) b = 10;
從變量a
中提取出數據類型,即int
,而後做爲變量b
的數據類型,因此變量b
的數據類型也是int
。模板
當使用VS和VS Code的時候,用鼠標指着變量,將能夠看到變量的數據類型。stream
舉個完整的代碼例子:基礎
#include <iostream> // std::cout std::endl std::boolalpha #include <type_traits> // std::is_same int main(void) { const auto value = 0ul; // 在類型中提取出類型做爲變量的類型, const unsigned long std::cout << std::boolalpha << "value的類型是否是const unsigned long?"; std::cout << std::is_same<decltype(value), const unsigned long>::value << std::endl; return 0; }
輸出結果:變量
value的類型是否是const unsigned long?true
因爲0ul
是unsigned 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起,廢棄了這個沒用的功能。auto
被賦予類型推導的功能。decltype
從C++11開始加入。