章节前言
C++98对于类型推衍有单独的一套规则,它们被应用于函数模板的使用过程中。C++11在此基础之上做了些许修改并增加了2条额外推衍规则,即auto
与decltype
。随后的C++14则扩展了auto
与decltype
的使用范围。类型推衍使开发者们得以免于反复输入那些直观明了的类型名称,并且大大增加了C++程序的可修改性,因为在存在类型推衍的情况下,一旦源码中某个变量的类型被更改,其他位置与其相关的类型也会自发进行更改。但是类型推衍并非完美无缺,它的存在使得代码更加难以理解,原因在于编译器所作出的类型推衍可能并非像你想象的那样显然。
如果你不能清楚认知类型推衍规则,这一悲惨的事实将导致你无法高效使用Modern C++。以上并非危言耸听,类型推衍在很多地方发挥着作用,例如函数模板、auto
、decltype
表达式,以及C++14中所出现的decltype(auto) construct
。
本章将对C++开发者所必须了解的类型推衍规则作出介绍,其主要内容为:
- 模板类型推衍的工作机制
- auto的工作机制
- decltype的工作机制
在此基础之上,本章还将介绍如何令编译器将其类型推衍结果可视化,从而保证你可以放心大胆地认为它按照你的要求完成了类型推衍。