C++11新语法糖之尾置返回类型
C++11的尾置返回类型初衷是为了方便复杂函数的声明和定义,但是当复杂度稍微提升一些的时候很明显能注意到这种设计的作用微乎其微.
首先考虑如下代码:
//返回指向数组的指针
auto func1(int arr[][3], int n) -> int(*)[3] {
return &arr[n];
}
这段代码非常符合尾置返回类型设计的用途,按照以往的方式我们可能需要:
int (* func1(int arr[][3], int n))[3] {
return &arr[n];
}
这样看似乎这个新特性非常的方便,但是当函数复杂度稍微提升,情况完全不一样.假设我们要定义一个返回指向func1函数的指针的函数:
//原版本:
int(*(*func2())(int arr[][3], int n))[3]{
return func1;
}
//使用新特性的版本
auto func2() -> int (*(*)(int arr[][3], int n))[3] {
return func1;
}
很明显这里尾置返回类型基本上没有什么方便。当函数复杂度进一步提升时,这种语法糖的味道完全已经消失,接下来只有各凭本事:
//函数接受一个指向func1函数的指针的参数,返回指向func2的函数的指针;
auto func3(int(*(*ptf)(int arr[][3], int n))[3]) -> int (*(*(*)())(int arr[][3], int n))[3]{
...
}
写到这里似乎可以做出一些总结性的言论,尾置返回类型只适用于简单的函数声明/定义,因为复杂度的提升会完全掩盖语法糖的作用,这时更应该考虑decltype.
C++11新语法糖之尾置返回类型的更多相关文章
- lamda表达式和尾置返回类型
基本lambda语法 基本形式如下: [capture](parameters) mutable ->return-type {body} [capture]:叫做捕获说明符,表示一个lambd ...
- C++ decltype类型说明符(尾置返回类型使用)
转自https://blog.csdn.net/yhl_leo/article/details/50865552 1 基本语法 decltype 类型说明符生成指定表达式的类型.在此过程中,编译器分析 ...
- 关于C#7 新语法糖
C#7新语法糖 1.Switch 使用 goto 使用 ; switch (kk) { : Console.WriteLine(); ; : Console.WriteLine(); ; : Con ...
- Vue3 Composition API写烦了,试试新语法糖吧—setup script
前言 Vue3发布近一年了,相信大家对Vue3的新特性,新语法都很熟悉了.那么在使用Composition API的过程中,有没有觉得整个过程比较繁琐.比如你的模板里用到了大量的state和方法的时候 ...
- 各个JDK版本新语法糖
java5语法扩充 自动装箱.泛型.动态注解.枚举.可变长参数.循环遍历等语法 JDK7 fork/join jdk8 二进制数的原生支持.switch语句中支持string <>操作符 ...
- c#4.5新语法--自动属性和隐式类型
1.自动属性 自动属性是c#中属性定义的两种形式的一种:传统属性定义.自动属性. 1.1 传统属性定义 private int _age; public int ...
- C++11语法糖
1.constexpr变量:声明为constexpr的变量一定是一个常量,新标准允许定义一种特殊的constexpr函数使得编译时就可计算结果,这样就能用constexpr函数去初始化constexp ...
- C++11新特性总结 (二)
1. 范围for语句 C++11 引入了一种更为简单的for语句,这种for语句可以很方便的遍历容器或其他序列的所有元素 vector<int> vec = {1,2,3,4,5,6}; ...
- C++11 新特性总结
前言 转载请注明出处,感谢! C++11 的新特性 1 变量和基本类型 1.1 long long 类型 扩展精度浮点数,10位有效数字 1.2 列表初始化 初始化的几种不同形式,其中用花括号来初始化 ...
随机推荐
- Python 日志处理(三) 日志状态码分析、浏览器分析
在企业中,从日志中提取数据进行分析,可以帮助企业更加了解用户行为,用户最感兴趣的产品或者内容,分析得到数据后,可以决定企业在今后的走向. 从这些日志数据中,比较重要的有: 1. 用户访问最多的url, ...
- 0e开头MD5值小结
s878926199a 0e545993274517709034328855841020 s155964671a 0e342768416822451524974117254469 s214587387 ...
- C# winform 实现图片轮播
作为一个C#winform刚刚入门的我 觉得这可能是初学者都会遇到的 我自己也觉得很神奇 首先 窗体里有一个Button按钮,和一个pictureBox 图片框 定义一个线程方法 /// < ...
- jquery.base64.js 中文乱码处理
c# 转码:Convert.ToBase64String(Encoding.UTF8.GetBytes(str)) js 解码:$.base64.atob(this.options.valids, t ...
- Resin4安装配置
#Resin4安装配置 # Resin4安装配置 #centos6 #参考http://467754239.blog.51cto.com/4878013/1558435 #yum -y install ...
- 50个PHP程序性能优化的方法
1. 用单引号代替双引号来包含字符串,这样做会更快一些.因为 PHP 会在双引号包围的 字符串中搜寻变量,单引号则不会,注意:只有 echo 能这么做,它是一种可以把多个字符 串当作参数的" ...
- springmvc 4.3,RequestParamMethodArgumentResolver无法正常解析String参数问题解决
搭建一个新工程时,想使用最新稳当版的springmvc,所以选择了最新的版本 <dependency> <groupId>org.springframework</gro ...
- Require,js配置使用心得
首先大家要知道requirejs是干嘛用的,要解释,那就用一句话说下:RequireJS是一个JavaScript文件和模块加载器接下来我们开始学会配置使用requireJs,当然在学习使用的过程中也 ...
- 向MapReduce转换:生成用户向量
分两部分: <span style="font-size:18px;">/*** * @author YangXin * @date 2016/2/21 * @ inf ...
- ZOJ 3890 Wumpus
Wumpus Time Limit: 2 Seconds Memory Limit: 65536 KB One day Leon finds a very classic game call ...