C++14 引入的,如果函数声明的声明说明符序列_包含关键词 auto,那么尾随返回类型可以省略,且编译器将从返回语句中所用的表达式的类型推导出它。如果返回类型没有使用 decltype(auto),那么推导遵循模板实参推导的规则进行

在C++中,返回类型推导(Return Type Deduction)是一种编译时过程,它允许编译器根据函数返回语句中的表达式自动推断函数的返回类型。这种特性在C++17标准中被引入,通过使用auto关键字和尾返回类型(trailing return type)语法来实现。

以下是返回类型推导的基本用法:

  1. 使用auto关键字:当你在函数声明中使用auto作为返回类型,编译器会根据函数体中的返回语句来推断实际的返回类型。
auto func() {
    return 42; // 编译器推断返回类型为int
}
  1. 尾返回类型:在函数声明的末尾使用->符号后跟返回类型,这种方式允许你在函数声明时就明确返回类型,但仍然可以利用auto关键字来简化函数体中的返回语句。
auto func() -> int {
    return 42; // 明确返回类型为int
}
  1. 模板函数中的返回类型推导:在模板函数中,返回类型推导可以帮助编译器确定模板实例化时的返回类型。
template<typename T>
auto add(T a, T b) {
    return a + b; // 编译器根据a和b的类型推断返回类型
}
  1. lambda表达式中的返回类型推导:在lambda表达式中,返回类型推导可以简化代码,使编译器根据lambda体中的表达式自动推断返回类型。
auto lambda = [](int a, int b) {
    return a + b; // 编译器推断返回类型为int
};

返回类型推导提供了一种灵活的方式来定义函数,特别是当返回类型复杂或依赖于函数参数的类型时。这使得代码更加简洁,减少了类型声明的冗余,同时也提高了代码的可读性。