关于 lambda expression 返回值的类型转换

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;
    // ...
};

Reference

https://stackoverflow.com/a/30783733/6052725

原文地址:https://www.cnblogs.com/Patt/p/8112603.html