C++入門教程(21):類型推導和類型提取

類型推導

寫C++代碼時,常常遇到特別長的數據類型,因爲這個緣由,C++新增類型推導功能autoios

用法:code

auto a = 0;

類型推導,就是由編譯器在編譯期推導出=右邊的數據類型,爲=左邊的變量決定數據類型。例如上面例子,0默認是int類型,那麼變量a的數據類型就是int編譯器

類型提取

有時候,不能使用類型推導但仍是要用某個變量的類型做爲新變量的類型,這個時候就能夠用關鍵字deltypeit

類型提取常常與模板配合使用,模板是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

基礎講解

因爲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標準庫。

補充知識(瞭解便可)

  1. 關鍵字auto好久之前,只要聲明變量都要在數據類型前面添加auto。事實上,好久之前就能夠不加,auto至關一個沒用的關鍵字。因此從C++11起,廢棄了這個沒用的功能。
  2. 從C++11起,關鍵字auto被賦予類型推導的功能。
  3. 關鍵字decltype從C++11開始加入。
相關文章
相關標籤/搜索