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开始加入。
相关文章
相关标签/搜索