后置返回值类型主要用于模板函数中,它是C++11推出的新用法。其中使用到了auto和decltype两种类型说明符。
auto和decltype虽然都是类型说明符,但是二者是不同的:auto是根据推导初始值的类型来确定变量的类型,而decltype则只是确定类型,如下所示:
auto i = x + y; //通过x+y的结果类型来推导出i的类型并对其初始化
decltype(x+y) i; //通过x+y的结果类型来定义i的类型
下面就来说一下后置返回值类型。
现在写一个模板函数add:传入两个任意类型参数,返回两数之和。如果使用模板的话,大概可以写成这样:
template<typename T,typename Y>
XXX add(T v1, Y v2)
{
return v1+v2;
}
那么,这里的返回值应当是什么类型呢?如果传入的两个参数类型不同,那么情况也是不同的:如果一个是int,一个是double,那么返回值就是double;如果一个是int,一个是short,那么返回值就是int;如果一个是char,一个是short,返回值则是int。可见,返回值类型是与v1+v2这一结果的类型相关的。
那么,可否直接把返回值也写成模板呢?如下所示: