导入
自动返回类型
在本节课中,我们将学习一种能够自动推断返回类型的技术。
自动返回类型
函数模板能够自动推导其返回类型。
1template <typename T1, typename T2> 2auto add(T1 fir, T2 sec) -> decltype(fir + sec) { 3 return fir + sec; 4}
自动返回类型推导通常用于函数模板,但也可应用于非模板函数。
规则:
-
auto:引入延迟返回类型的语法auto的类型推导基于函数模板参数的推导。函数模板参数推导会进行类型衰减。因此,auto并不返回确切类型,而是返回衰减后的类型,例如在模板参数推导中所示。 -
decltype:声明返回类型 -
必须使用这种替代函数语法
C++11 中自动推导返回类型的语法违背了软件开发中的关键原则:DRY。DRY 指的是 不要重复自己。
自动返回类型:C++14
函数模板能够自动推导其返回类型。
1template <typename T1, typename T2> 2auto add(T1 fir, T2 sec) { 3 return fir + sec; 4}
规则:
auto:引入延迟返回类型的语法decltype声明返回类型替代函数语法是必需的
使用表达式 decltype(auto) 时,auto 采用与 decltype 相同的规则来确定类型。这意味着,特别地,不会发生类型衰减。
- 两种声明是等价的。
1 decltype(expr) v = expr; 2 decltype(auto) v = expr;
- 该语法同样适用于函数模板的自动返回类型。
1 template <typename T1, typename T2> 2 decltype(auto) add(T1 fir, T2 sec) { 3 return fir + sec; 4 }
当函数模板包含多个返回语句时,所有返回语句必须具有相同的类型。
在下一课中,我们将学习自动返回类型推导的一个实例。