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类型。