网站建设 任务分配表,短视频app用户量排行榜,如何推广网站网站推广常用方法,网站专题模板这种语法的优势之一是可以在函数的返回类型中使用函数参数#xff0c;使得返回类型更灵活。
先来看一个使用尾返回类型的例子#xff1a;
#include iostream
auto add(int a, int b) - int
{return a b;
}int main()
{std::cout add(3, 4) …这种语法的优势之一是可以在函数的返回类型中使用函数参数使得返回类型更灵活。
先来看一个使用尾返回类型的例子
#include iostream
auto add(int a, int b) - int
{return a b;
}int main()
{std::cout add(3, 4) std::endl; // 输出 7return 0;
} 在这个例子中add 函数声明使用了尾返回类型通过 - int 指定了函数的返回类型为 int。这种语法的优势之一是可以在函数的返回类型中使用函数参数使得返回类型更灵活。
需要注意的是尾返回类型通常在函数定义的时候使用而不是在函数声明的时候。
这是来自C 11的新函数声明语法它被称为“尾随返回类型”。在函数声明结束时-表示以下是该函数的返回类型。只有在使用auto关键字而不是您通常期望的实际返回类型时才能使用它。
举例来说这两个声明是兼容的
int foo();
auto foo() - int;
根据你的口味你会发现它比旧的声明语法漂亮尤其是当返回类型是非常长/复杂
tasktypename details::_TaskTypeFromParam_Ty::_Type create_task(_Ty _Param);
auto create_task(_Ty _Param) - tasktypename details::_TaskTypeFromParam_Ty::_Type;
但是有时可能需要使用模板当函数的返回类型可能随参数而变化时。
说你想要一个模板函数添加变量
templatetypename T
T add(const T x, const T y)
{ return x y;
}
你只能添加相同类型的变量。假设您希望能够添加任何类型的变量如add((int)1, (double)2)。
templatetypename T, typename U
??? add(const T x, const U y)
{ return x y;
}
问题是你不能事先告诉x y的结果类型将是什么。作为模板它们甚至可以是非整数类型。难道你不能这样做add(std::string(x), y)
Decltype以及新的函数声明语法让你解决这个问题。
templatetypename T, typename U
auto add(const T x, const U y) - decltype(x y)
{ return x y;
}
Decltype“返回”表达式的类型。由于您需要x和y已宣布为decltype(x y)才能正常工作因此您需要新的语法。