美文网首页C++入门教程
C++入门教程(21):类型推导和类型提取

C++入门教程(21):类型推导和类型提取

作者: 小古银 | 来源:发表于2018-04-21 17:49 被阅读0次

小古银的官方网站(完整教程):http://www.xiaoguyin.com/
C++入门教程视频:https://www.bilibili.com/video/av20868986/


类型推导

写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 <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开始加入。

相关文章

  • C++入门教程(21):类型推导和类型提取

    小古银的官方网站(完整教程):http://www.xiaoguyin.com/C++入门教程视频:https:/...

  • Item 1Understand template type d

    引子 模板类型推导是Modern C++特性auto的基础,但模板类型推导和auto类型推导有一些区别,具体看正文...

  • 模板类型推导与auto

    本文聊聊C++中的模板类型推导和auto。两者其实是一样的,前者推导T的类型,后者推导auto的类型。本文初创于公...

  • C++ auto 类型推导

    C++ auto 类型推导规则与模板类型推导[https://www.jianshu.com/p/6490ea37...

  • C++型别推导1——模板推导

       自C++98开始,C++就具备了类型自动推导的能力。在11版本发布之前,C++只有一种类型推导方法,即模板类...

  • C++ 11的类型推导 auto

    在声明变量时使用auto代替类型,C++编译器就会自动推导出变量的类型 sum被推导为int,使用auto声明的变...

  • Effective Modern C++ 系列之 条款1: 理

    Effective Modern C++ 系列之 条款1: 理解模板型别推导 1. CPP模板类型推导 函数模板一...

  • C++ 自动类型推导

    在弄 g2o 图优化的时候,需要设置一条边的置信度,大概如下: 那行设置 information 矩阵蛋疼在于,这...

  • C++模板类型推导

    模板是C++的重要特性,是C++标准模板库的基础。模板可以根据数据类型自动生成代码,大大减少重复代码。模板实例化的...

  • effective modern C++笔记 第二章

    1. auto类型推导与模板类型推导的相同点 Type类型在包含auto的时候,本质上Type和ParamType...

网友评论

    本文标题:C++入门教程(21):类型推导和类型提取

    本文链接:https://www.haomeiwen.com/subject/votflftx.html