• cxx17 尾随返回类型


    多数情况下,我都很少会用到尾随返回类型。

    这是因为习惯的力量。

    不过个人而言,必须不断打破自己的惯性。

    所以关于尾随返回类型,我也有一些看法,可以记录一下。

    尾随返回类型

    何者?

    尾随返回类型( trailing return type declaration )自从 C++11 起被引入以来,经受了各式各样的赞扬与意料之外的保守势力的反对。

    所谓尾随返回类型,无非是将函数声明格式中的返回类型部分予以后置,而其原来的位置则采用 auto 关键字代替。

    这样的做法一方面是向现代编程语言的风格靠齐,另一方面也是强调自动推定类型的一个开始。从那时起,自动推定类型经历了 11 年的演进,在 C++17 开始以来,不但获得了广泛的编译器支持(该填的坑大抵也算是填的差不多了),而且着着实实地改善了程序员的生活质量。

    现在用 auto 这个词的时候大家也没什么心理负担了。而当初 auto 改变其原有的语义转而变为自动推定的标志时,很多保守派是极力反对的,因为这样或会引发程序员对类型不求甚解、胡乱运用、甚至引发意料外的误用问题。

    那么,尾随返回类型的典型开始是这样:

    auto main() -> int {
      //...
      return 0;
    }
    
    // = int main() { return 0; }

    所以,它的范式一目了然:对于传统的函数声明

    int func_name(int x, int y);

    来说,新的尾随返回类型声明方法看起来像这样:

    auto func_name(int x, int y) -> int;

    它看起来就好像只不过是一支语法糖而已,是吗?

    强调自动推定从这时候开始

    其实,并不然,这就是我们所提到的 auto 的身份转变和被强调的开始。

    使用尾随返回类型,首先是部分强制的。即是说,当你正在使用 lambda 表达式时,如果需要返回值,怎么办?

    此时有两种做法。

    一是什么也不做,那么自动推定将会从调用者签名以及 lambda 表达式的 return 语句中试图完成自动推导。

    #include 
    #include 
    
    auto caller(std::function sum) {
      return sum(1, 3);
    }
    
    int main(){
      std::cout << caller([](uint64_t a, uint64_t b){
        return a+b;
      }) << '\n&
  • 相关阅读:
    Error creating bean with name 'xImpl': Unsatisfied dependency expressed through field 'baseMapper'
    磁盘的工作方式
    React中创建和组织组件以及如何在组件之间传递数据和管理状态
    B树、B+树详解
    java基于ssm的高校人事员工工资管理系统
    面试题:MySQL事务的ACID如何实现?
    微信小程序实战十四:小程序及APP端实现客服功能
    linux 7za 编译安装
    【Python】Python 将一个文件夹备份到一个 ZIP 文件
    阿里巴巴API接口解析,实现获得商品详情
  • 原文地址:https://blog.csdn.net/m0_73257876/article/details/126579208