zoukankan      html  css  js  c++  java
  • 关于 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

  • 相关阅读:
    关键字static在C和C++中的区别
    C指针声明解读之左右法则
    各大公司面试题集锦
    C++的const和static的用法
    C++11常用特性总结
    C++多态下的访问修饰符
    #define 宏实现函数功能可能存在的问题
    Qt读写Json
    C/C++ 内存与指针
    C++ delete仍可访问的问题
  • 原文地址:https://www.cnblogs.com/Patt/p/8112603.html
Copyright © 2011-2022 走看看