C++11新语法糖之尾置返回类型
2017-11-12 17:53
120 查看
C++11的尾置返回类型初衷是为了方便复杂函数的声明和定义,但是当复杂度稍微提升一些的时候很明显能注意到这种设计的作用微乎其微.
首先考虑如下代码:
C++
这段代码非常符合尾置返回类型设计的用途,按照以往的方式我们可能需要:
C++
这样看似乎这个新特性非常的方便,但是当函数复杂度稍微提升,情况完全不一样.假设我们要定义一个返回指向func1函数的指针的函数:
C++
很明显这里尾置返回类型基本上没有什么方便。当函数复杂度进一步提升时,这种语法糖的味道完全已经消失,接下来只有各凭本事:
C++
写到这里似乎可以做出一些总结性的言论,尾置返回类型只适用于简单的函数声明/定义,因为复杂度的提升会完全掩盖语法糖的作用,这时更应该考虑decltype.
首先考虑如下代码:
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.
相关文章推荐
- C++11返回类型后置语法的使用示例
- C++11返回类型后置语法的使用
- C++11的语法新特性
- C++11新语法--01 Lambda表达式
- C++11 语法记录
- C++11 常用语法
- C++11系列-改进的类型推导:auto、decltype和新的函数语法
- C++11的语法新特性
- Sophus VS2010编译不支持?C++11语法的缘故。那有没有不带C++11特性的Sophus版本呢?
- C++11 类型后置语法
- (转)C++11的语法新特性
- C++11带来的优雅语法
- C++11的语法新特性
- vi/vim语法提示兼容C++11
- C++11新语法糖之尾置返回类型
- C++11 常用语法
- 【C++11学习笔记】返回类型后置语法
- C++11的语法新特性
- 尝试使用C++11语法,挺好
- C++11 语法记录