《Effective Modern C++》学习笔记之条款三:理解decltype

decltype是C++11新增的一个关键字,它的主要应用场景是哪些返回值依赖于形参型别的场景。一般来说decltype告诉你的结果与你预测的几乎相同,所以这里就不再累述,只需要记住以下几点即可:

decltype(expression) var; 具体判断逻辑如下:(1)如果expression没有使用括号括起来,则类型与expression完全相同,例如 const int i =0; decltype(i) var;则var为const int.(2)如果expression是一个函数调用,则var与函数返回值相同。注意,此时并不会调用函数,编译器通过函数原型,获取返回类型(3)如果expression是一个左值且使用括号括起来,则var为其类型的引用。例如int i =0; decltype((i)) var;则var为int&,(4)以上情况都不满足,则var与expression完全相同.例如 long i =0;decltype(i+6)var;此时var为long类型。

要点速记

  • 绝大多数情况下,decltype的推导结果与你预测的完全相同
  • 对于型别为T的左值表达式,除非表达式仅有一个名字,decltype总是会推导为T&
  • C++14支持decltype(auto),用法和auto一样,它会从其初始化表达式出发来推导型别,但是它的型别推导使用的是decltype的规则

猜你喜欢

转载自blog.csdn.net/Chiang2018/article/details/114004935
今日推荐