小古银的官方网站(完整教程):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
基础讲解
由于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起,废弃了这个没用的功能。 - 从C++11起,关键字
auto
被赋予类型推导的功能。 - 关键字
decltype
从C++11开始加入。