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 列表初始化 初始化的几种不同形式,其中用花括号来初始化 ...
 
随机推荐
- ERP中通过EDI导入资料的时候出现【Microsoft Office Excel不能访问文件‘C:\Windows\TEMP\433....’
			
问题描述: ERP中导入单据的时候报错,Microsoft Office Excel不能访问文件'C:\Windows\TEMP\433....可能的原因有:·文件名称或路径不存在,文件正被其他程序使 ...
 - 关于Excel数据批量导入数据库的案例
			
写这个案例主要是感觉这个功能挺实用,很多地方会用得到的,废话就不多说了,直接上对应的源码. 这个案例我运用的是Winform窗体程序实现数据的导入. 首先是数据库的登陆界面如下: 源码如下: usin ...
 - 史上最全常用正则表达式(Javascript公众号推文)
			
2017-04-13 zxin JavaScript很多不太懂正则的朋友,在遇到需要用正则校验数据时,往往是在网上去找很久,结果找来的还是不很符合要求.所以我最近把开发中常用的一些正则表达式整理了一下 ...
 - sql查询语句报错处理——ERROR: failed to find conversion function from unknown to text
			
今天遇到写存储过程遇到的一个小问题,在查询语句中使用到了自定义的数当做列的值,然后想给这一列起一个别名 ,就直接在后面用了 as 别名.执行存储过程,存储过程报错,ERROR: failed to f ...
 - pymysql 模块介绍
			
pymysql模块是python与mysql进行交互的一个模块. pymysql模块的安装: pymysql模块的用法: import pymysql user=input('user>> ...
 - Android 异步消息处理机制终结篇 :深入理解 Looper、Handler、Message、MessageQueue四者关系
			
版权声明:本文出自汪磊的博客,转载请务必注明出处. 一.概述 我们知道更新UI操作我们需要在UI线程中操作,如果在子线程中更新UI会发生异常可能导致崩溃,但是在UI线程中进行耗时操作又会导致ANR,这 ...
 - Process Doppelgänging
			
Process Doppelgänging -- 新的代码注入技术,通杀windows系统的所有版本,并且能绕过绝大多数的安全软件. 介绍 今天(2017-12-07),在伦敦举行的2017年黑帽欧洲 ...
 - Spring Data 整合 ElasticSearch搜索服务器
			
一.基于 maven 导入坐标(pom.xml文件) <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi ...
 - SPFA【模板】单源最短路径
			
题目传送 https://www.luogu.org/problem/show?pid=3371没啥解释,SPFA纯模版qaq//Gang #include<iostream> #incl ...
 - 40.Linux应用调试-使用gdb和gdbserver
			
1.gdb和gdbserver调试原理 通过linux虚拟机里的gdb,来向开发板里的gdbserver发送命令,比如设置断点,运行setp等,然后开发板上的gdbserver收到命令后,便会执行应用 ...