1.关键字decltype:
在c98模板缺陷的改进,例:
templatevoid ft(T1 x,T2 y){ ...?type xpy = x+y;//类型不知道,涉及类型转换,运算符重载. }
在c11增加了decltype:
int x;decltype(x) y;//使得y的类型类似x.//在上面的问题可以这样解决decltype(x+y) xpy = x + y;//decltype(x+y)这整体是一种类型;deltype具体实现比这里的示例复杂
2.c++后置返回类型
template?type? gt(T1 x,T2 y){ ... return x+y;//x+y类型未知,}
不可使用decltype(x+y)作为返回类型,xy还未声明,就没有xy,当然就没有其类型,所以有下列语法
double h(int x,float y);使用新语法可以写成:
auto h(int x,float y) -> double;
则上面的模板可以写作:
auto gt(T1 x,T2 y) -> decltype(x+y){ ... return x+y;}