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 列表初始化 初始化的几种不同形式,其中用花括号来初始化 ...
随机推荐
- [线性筛]P1865 A % B Problem
题目背景 题目名称是吸引你点进来的 实际上该题还是很水的 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行,每行两个整数 l,r 表示区间 输出格式: 对 ...
- SQL学习入门(一) 概述
从事开发也有一段时间了,期间接触SQL也挺长时间了.许多东西也不是理解的特别深刻,所以写写随笔总结归纳一下. 如有不对的地方,欢迎指正! 一.认识SQL (1) 什么是SQL? 1.SQL 指结构化查 ...
- MyBatis物理分页的代码实现
一.分页 MyBatis有两种分页方法:内存分页,也就是假分页,本质是查出所有的数据然后根据游标的方式,截取需要的记录,如果数据量大,执行效率低,可能造成内存溢出.物理分页,就是数据库本身提供了分页方 ...
- BST 解析 (二)height and deletion
前面一章介绍了BST的结构和一些简单的基本功能,例如:insert,findMin,nextLarger等等.这一节主要讲解一些BST的delete node操作还有BST的height的分析以及一些 ...
- 【转】vscode: Visual Studio Code 常用快捷键
原文链接:https://www.cnblogs.com/bindong/p/6045957.html vscode: Visual Studio Code 常用快捷键 主命令框 F1 或 Ctrl+ ...
- CentOS7 nginx简单配置pathinfo模式(ThinkPHP)
location ~ \.php { #去掉$ root H:/PHPServer/WWW; fastcgi_pass 127.0.0.1:9000; fastcgi_in ...
- 洛谷 P3927 Factorial
题目描述 SOL君很喜欢阶乘.而SOL菌很喜欢研究进制. 这一天,SOL君跟SOL菌炫技,随口算出了n的阶乘. SOL菌表示不服,立刻就要算这个数在k进制表示下末尾0的个数. 但是SOL菌太菜了于是请 ...
- Jarvis OJ - [XMAN]level1 - Writeup——简单shellcode利用
100分的pwn 简单查看一下,果然还是比较简单的 放到ida中查看一下,有明显的溢出函数,并且在函数中打印出了字符串的地址,并且字符串比较长,没有NX保护 所以我们很容易想到构造shellcode, ...
- ios怎么推断日期是周末?
- (NSString *)calculateWeek:(NSDate *)date{ //计算week数 NSCalendar * myCalendar = [NSCalendar currentC ...
- TableML Excel编译/解析工具
TableML TableML, Table Markup Language, 基于电子表格的标记语言, 类似JSON, XML, INI,TableML可以作为软件项目的配置标记语言, 与之不同的是 ...