在祁宇的<深入应用c++11>书中,第一章介绍了auto,decltype和返回类型后置的语法.不过,其返回类型后置的介绍早就过时了.
c++11中的返回类型后置用于模板类的返回类型推导,并解释为在编译时,不能对默认的前置返回类型进行估计.典型示例代码如下:
#include <iostream>
using namespace std;
template <class T1,class T2>
auto add(T1 t1, T2 t2)->decltype(t1+t2)
{
return t1+t2;
}
int main()
{
auto t1=2.5;
auto t2=3;
auto rst=add(t1,t2);
cout<<rst<<endl;
return 0;
}
其中add函数的返回类型就进行了后置,用decltype进行了推导.
这个操作仅仅是一个过渡的方法,c++14能完美的解决这个问题.代码如下
template <class T1,class T2>
auto add(T1 t1, T2 t2)
{
return t1+t2;
}
去掉返回类型后置一样可以编译通过并得到正确的计算结果.