zoukankan      html  css  js  c++  java
  • C++11新语法糖之尾置返回类型

    C++11的尾置返回类型初衷是为了方便复杂函数的声明和定义,但是当复杂度稍微提升一些的时候很明显能注意到这种设计的作用微乎其微.

    首先考虑如下代码:

    C++
    //返回指向数组的指针
    auto func1(int arr[][3], int n) -> int(*)[3] {
        return &arr[n];
    }
    

    这段代码非常符合尾置返回类型设计的用途,按照以往的方式我们可能需要:

    C++
    int (* func1(int arr[][3], int n))[3] {
        return &arr[n];
    }
    

    这样看似乎这个新特性非常的方便,但是当函数复杂度稍微提升,情况完全不一样.假设我们要定义一个返回指向func1函数的指针的函数:

    C++
    //原版本:
    int(*(*func2())(int arr[][3], int n))[3]{
        return func1;
    }
    //使用新特性的版本
    auto func2() ->  int (*(*)(int arr[][3], int n))[3] {
        return func1;
    }
    

    很明显这里尾置返回类型基本上没有什么方便。当函数复杂度进一步提升时,这种语法糖的味道完全已经消失,接下来只有各凭本事:

    C++
    //函数接受一个指向func1函数的指针的参数,返回指向func2的函数的指针;
    auto func3(int(*(*ptf)(int arr[][3], int n))[3]) -> int (*(*(*)())(int arr[][3], int n))[3]{
        ...
    }
    

    写到这里似乎可以做出一些总结性的言论,尾置返回类型只适用于简单的函数声明/定义,因为复杂度的提升会完全掩盖语法糖的作用,这时更应该考虑decltype.

  • 相关阅读:
    oracle RAC 更换IP
    12C oracle 12.1.0.2版本打补丁
    node name配置错误,导致grid日志在报警
    input_subsys 输入子系统框架分析
    www.bing.com
    getopt函数使用说明
    FreeType 矢量字体 测试移植(1)
    字符的编码方式
    在开发板上显示字符和中文
    块设备驱动程序的框架
  • 原文地址:https://www.cnblogs.com/ysherlock/p/7822289.html
Copyright © 2011-2022 走看看