Logo
Section 1 / 18

自动返回类型

在本节课中,我们将学习一种能够自动推断返回类型的技术。

导入

自动返回类型

在本节课中,我们将学习一种能够自动推断返回类型的技术。

自动返回类型

函数模板能够自动推导其返回类型。

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 }

当函数模板包含多个返回语句时,所有返回语句必须具有相同的类型。


在下一课中,我们将学习自动返回类型推导的一个实例。

详细信息

示例