1、在模板函数中,通过对模板类型的运算后,并不能确定返回的类型。
template<class T1,class T2>
void ft(T1 x,T2 y){
? xpy = x+y;
}
x+y的返回值是无法确定的,可以使用decltype来实现。
decltype(x+y) xpy = x+y;
decltype(x+y)的意思就是返回类型就是x+y的结果类型。
double xx = 4.4;
decltype(xx) w = xx; //w是double类型
如果想把另一个变量指定为xx类型的引用,就需要再加个括号。
decltype((xx)) r = xx; //r就是double &类型
如果需要多次声明,可以结合typedef。
{
typedef decltype(x+y) xytype;
xytype xpy = x+y;
xytype arr[10];
...
}
2、如果是函数返回类型不确定,是没办法使用decltype。
decltype(x+y) ft(T1 x,T2 y)
这样是不行的,此时还未声明参数x和y,它们不在作用域内。必须在声明参数后使用decltype。
有一种语法可以把返回类型放入到参数定义的后面。
auto ft(T1 x,T2 y) -> decltype(x+y)
auto是一个占位符,表示后置返回类型提供的类型,-> 后面跟着decltype(x+y)就是需要返回的类型。
标签:返回,decltype,xpy,c++,xx,类型,模板,xytype From: https://blog.51cto.com/u_3764469/6079228