一、函数返回类型

一般来说,在c++这种强类型语言里,返回类型摆明了应该是显示的、无歧义的。换句话说,其实decltype从静止的眼光看,在c++中意义不大。但是,凡事都怕但是嘛。语言不是静止不前,是发展的,在一些场合,是需要对一些返回类型做推导的,而这其中就不可避免的需要。其实对于支持RUNTIME的语言来说,这都不是事儿。更或者如果是弱类型语言的话这也不是啥了不起的。
decltype这个语法关键字的用法很多,这里只谈这个返回类型中的应用,有兴趣可以查看以前相关的文章。c++11(更准确的说是c++14才更完善)中引入了这个关键字,用来做为函数返回值的一种情况,即函数拖尾时的数据类型的自动推导。这个函数拖尾的名词,还不能说翻译的权威,大家明白意思即可。

二、函数拖尾

在c++语言中,函数的返回值如果是一个表达式,则可以使用decltype来进行处理,但是标准的直接应用又无法通过编译器的编译,那么则可以使用下面的方法:

template <typename T1, typename T2>
auto Add(T1 a, T2 b) -> decltype(a+b)
{return a + b;
}

这个就是函数拖尾。auto在这的意思是告诉编译器,类型是由后面的decltype决定的。auto后面拖着一个->的decltype的类型判断小尾巴。这也算是decltype的一个函数辅助用法,其实说到底,仍然是对类型的动态解析,这也是c++对类型推导的一个方式。

三、decltype(auto) 和函数拖尾

在上面的函数拖尾中,其实看上去是有些笨拙,或者稍显丑陋,所以在c++14中有了一种更好的表示方法:

template <typename T1, typename T2>
decltype(auto) Add(T1 a, T2 b)
{return a + b;
}

换句话说,这两种情形是等价的。但是这里有一个问题出现了,在学习auto关键字时,已知它是可以做为返回值使用的,那么,这两种情形有什么不同的?为什么不能直接使用auto呢?回答这个问题很简单,首先,能够直接判断返回类型的,就用auto(这句话的意思是,auto未必能正确推断出原有类型),而需要推导的就用这个拖尾方式。其次,这种拖尾方式返回的是引用类型,而auto返回的值类型。同时,拖尾方式保留了c限定符。

四、总结

c++11标准以上,提供了一系列的新的小技能(意思是好用),比如常和decltype可以配合使用的declval,constexpr等等,最好手头还是下个标准文档,这样配合着官方的网站,对着例程,没有什么不能搞定的。当然,前提是得对c++有一定的了解。否则,就慢慢的学习一下,要有心理准备被虐的准备。
努力要从今日始!少年归来自可期!

decltype和拖尾返回类型相关推荐

  1. C++ decltype类型说明符(尾置返回类型使用)

    转自https://blog.csdn.net/yhl_leo/article/details/50865552 1 基本语法 decltype 类型说明符生成指定表达式的类型.在此过程中,编译器分析 ...

  2. C++——auto、decltype、返回类型后置、模板别名:using =、nullptr

    1.3.声明 1.3.1.auto 以前版本关键字auto是一个存储类型说明符,表示动态存储还是静态存储,与static关键字对应,第九章也写了,C++11将其用实现自动类型推断(第三章).必须显示初 ...

  3. java statement 返回类型,6.3 返回类型和返回语句 | Return type Return statement

    无返回值函数 对于返回类型是void的函数,return后不跟表达式.最后的 return; 可以没有而让程序隐式执行.在void函数中的return语句还有提前使函数退出的作用而不进行接下来的计算, ...

  4. Android Studio Canvas 实现鼠标贝塞尔曲线拖尾特效

    Android Studio Canvas 实现鼠标贝塞尔曲线拖尾特效 特效预览图 什么是贝塞尔曲线? 百度百科: ​ 贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图 ...

  5. Android Studio Canvas 实现鼠标贝塞尔曲线拖尾特效(富文本编辑器)

    特效预览图 什么是贝塞尔曲线? 百度百科: 贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线.一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段 ...

  6. Unity TrailRenderer实现拖尾

    目录 1. TrailRenderer 1.1 常见属性 1.2 曲线图调节 1.3 颜色设置 2. 小案例 屏幕划线 1. TrailRenderer 1.1 常见属性 顶部曲线图 拖尾结构 tim ...

  7. 王者服务器维护7月九号,王者荣耀S20赛季确定7月9号开始,钻石夺宝新增猛男专用拖尾特效...

    原标题:王者荣耀S20赛季确定7月9号开始,钻石夺宝新增猛男专用拖尾特效 明天王者荣耀周二例行更新,本次更新中会开启对战几率掉落永久英雄活动.赛季末段位冲刺活动,同时钻石夺宝新增一个全新的拖尾特效.这 ...

  8. Trailing return types尾部返回类型

    文章目录 为什么要有尾部返回类型 什么是返回类型推导(return type deduction) 不是什么时候都要使用尾部返回类型   尾部返回类型在C++中是一个很奇怪的内容,我们应该只在必要的时 ...

  9. HPLC鬼峰、基线漂移、拖尾、分叉峰、保留时间漂移、柱压过高等系列问题解析

    HPLC鬼峰.基线漂移.拖尾.分叉峰.保留时间漂移.柱压过高等系列问题解析 高效液相色谱法按分离机制的不同分为液固吸附色谱法.液液分配色谱法(正相与反相).离子交换色谱法.离子对色谱法及分子排阻色谱法 ...

最新文章

  1. 高斯计磁场测试仪磁力检测仪磁场测磁仪手持磁通计特斯拉计TD8620
  2. 全面 Severless 化只需要 7天!
  3. 谈谈surging引擎的tcp、http、ws协议和如何容器化部署
  4. web后端开发学习路线_学习后端Web开发的最佳方法
  5. form表单ajax提交 ac,請求Ajax 帶返回值的通用方法, 自動獲取頁面控件值(form表單post方法提交 ),自動給控件賦值...
  6. bootstrap-table 列属性_bootstrap中table如何隐藏列?
  7. 1、Spring Boot 中 SpringApplication初始化(ok)
  8. 会畅通讯登陆创业板上市,CEO黄元庚说云视频是下一个万亿级市场
  9. 主线程中慎用WaitForSingleObject (WaitForMultipleObjects)
  10. CentOS 7下安装GUI图形界面
  11. 内江计算机职业学校有哪些,内江第二计算机职业中学有哪些专业
  12. QQ快速登录协议的分析与漏洞利用
  13. windows权限维持的方法
  14. 山姆公司关于营销培训方案
  15. 榆熙教育:拼多多有效提高店铺出评率的技巧
  16. 哪个省才是高考地狱模式?有你的省吗?
  17. 为什么沃尔玛等零售商会结成移动支付联盟 ?
  18. 线性代数(三十四) : 广义特征向量
  19. 同构和异构关系图-行人re_ID
  20. 关于 Word 如何创建临时文件的说明

热门文章

  1. 中国大地坐标系CGCS2000
  2. Spring Framework框架起步,小白都看得懂(官翻版)!
  3. 关于Maven打包Java Web项目以及热部署插件Jrebel的使用
  4. quic client的数据发送流程
  5. php开启sockets模块,php开启php_sockets扩展
  6. 管理人员巡店用表-生鲜部经理及主管每日检查事项
  7. php 配置 error_reporting,关于php中的错误配置display_errors与error_reporting说明
  8. 飞书和钉钉之间,差了几个企业微信?
  9. html包zip有错误是什么意思,解压缩文件出现错误是什么回事
  10. 适合所有网站的前端优化技巧,值得你收藏!