lambda expression(lambda 表达式,$\lambda$ 表达式) 是 C++ 11 引入的特性。
一般而言,lambda 表达式的返回值类型可不指定,而由返回值推断。
需要注意的是:在不指定返回值类型时,lambda 表达式的返回值类型推断是不支持隐式(或称「自动」)类型转换的;这样设计是合理的(在逻辑上是说得通的),理由如下:
假设 lambda 表达式支持隐式返回值类型转换;显然,只有在 lambda 表达式中存在两个类型不同的 「return
表达式」时才有必要进行返回值类型转换;这样就给返回值类型推断带来一个问题:
究竟以哪个 return
表达式的类型作为返回值类型,而对其他与之类型不同的 return
表达式做自动类型转换(假设所涉及的类型转换都是存在的)呢?
这个问题并没有一个合理(resonable)的答案,「把第一个出现的 return
表达式的类型作为 lambda 表达式的返回值类型」其实并不合理(至少未必总是合理的)。
如果希望避免对 return
表达式的显式类型转换,则需要指明返回值类型,这样就可以做自动类型转换了:
auto f = [](Parameter-List) -> Return-Type { //Statements return expr1_of_type1; // ... return expr2_of_type2; // ...};