1、decltype 是啥子

感性认识跟 auto 一样

auto a = 1;

但 decltype 是这样用

decltype(表达式) a = 值;// 例如
decltype(1) a = 2;
decltype("ss") str = "123";auto a = 20;
decltype(a) b = 30;

大概就是根据 decltype() 括号里面表达式推导出相应的类型,至于与 auto 的不同点,先不用去比较它,初认识的时候会混淆,需要用的时候查查就好了。

2、decltype 括号里的推导规则是怎么样子的呢

略......去查吧,我也很头疼。

3、decltype 实际用途

这里举一个常用的例子

这种函数很常见吧,有也就返回 2 个数相加的结果

int add(int a, int b)
{return a + b;
}

这时候你可能会想到,我要是用浮点类型的咋办,这时候你会用重载的方式再写一次

double add(double a, double b)
{return a + b;
}

好像解决了一点,就是代码量多了一丢丢,后面翻查资料发现,模板也能解决这个问题,而且代码量少一丢丢

template<typename T>
T add(T a, T b)
{return a + b;
}

写完感觉很nice,什么整型浮点型啥的都不是问题。这时候可能有个S(介于A与C之间的)的需求说:我想要整型和浮点型相加的结果;

然后就开始着手写。思绪良久也写出了一个跟上边一样的模板

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

这时候我就懵逼逼了,add 的返回值是到底是 T1 还是 T2 呢。真不知如何下手啊,这个还是简单数据类型,要是复杂一点的数据类型那不就得删库跑路了。

那能不能让编译器自动推导呢,答案是有的,那今天我们的主角就登场了、

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

完整代码

#include <iostream>
using namespace std;template<typename T1, typename T2>
auto add(T1 a, T2 b)->decltype(a + b)
{return a + b;
}int main(int argc, char* argv[])
{cout << add(1, 2.14) << endl;return 0;
}

调试结果:3.14

C++11 decltype 的用法粗解相关推荐

  1. C++11 decltype类型推导详解

    decltype decltype 是 C++11 新增的一个关键字,它和 auto 的功能一样,都用来在编译时期进行自动类型推导. decltype 是"declare type" ...

  2. Django基础(11): 表单集合Formset的高级用法详解

    Formset(表单集)是多个表单的集合.Formset在Web开发中应用很普遍,它可以让用户在同一个页面上提交多张表单,一键添加多个数据,比如一个页面上添加多个用户信息.今天小编我就介绍下Djang ...

  3. C++ 实现 STL 标准库和算法(二)template 编程和迭代器粗解 实验楼笔记

    一.template 编程和迭代器粗解 1.1 实验内容 本节内容主要讲述 c++11 模板的用法,以后的代码中会大量的用到模板的知识.同时简单讲解迭代器的相关知识,为后面容器和算法的内容作铺垫. 1 ...

  4. Ext.Net学习笔记22:Ext.Net Tree 用法详解

    上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat="server"><Root> ...

  5. RxJava flatMap操作符用法详解

    RxJava系列文章目录导读: 一.RxJava create操作符的用法和源码分析 二.RxJava map操作符用法详解 三.RxJava flatMap操作符用法详解 四.RxJava conc ...

  6. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

  7. Linux下的awk用法详解

    Linux下的awk用法详解 一.awk介绍 二.awk的语法 三.awk常见用法 四.awk其他用法 五.awk语言特性 一.awk介绍 1.AWK 是一种处理文本文件的语言,是一个强大的文本分析工 ...

  8. 68.connect-flash 用法详解 req,flash()

    转自:http://yunkus.com/connect-flash-usage/ connect-flash 用法详解  前端工具  2016-10-05  2016-10-05  朝夕熊  11 ...

  9. 教程-Delphi中Spcomm使用属性及用法详解

    Delphi中Spcomm使用属性及用法详解 Delphi是一种具有 功能强大.简便易用和代码执行速度快等优点的可视化快速应用开发工具,它在构架企业信息系统方面发挥着越来越重要的作用,许多程序员愿意选 ...

最新文章

  1. 编写图形界面程序,显示一个红色反弹球的程序,当该球撞击Applet边框时,它应从边框弹回并以相反方向45°运动。
  2. C++ POD(Plain Old Data)类型
  3. primefaces_懒惰的JSF Primefaces数据表分页–第2部分
  4. 这篇看完我得理解ES6中中常见语法
  5. 云电脑是什么_云电脑和我们现在平时用的电脑有什么区别?
  6. phpstudy apache无法启动_phpstudy和wamp哪个好
  7. Mapbox词汇表中文文档(查找Mapbox相关的术语及其定义)
  8. ES6(一) —— 异步编程解决办法[从回调函数到promise,generator,async]
  9. Error while executing: am start -n错误解决方案
  10. 编程基本功:代码都写不好,还写什么注释
  11. win10 64位系统 excel2016 vba odbc方式 访问 oracle远程数据库 免安装oracle客户端
  12. linux 一键安装字体,在deepin中一键安装喜欢的字体,文档气质瞬间提升!
  13. IDEA 当前项目jdk版本查看
  14. 通过命名空间快速定位SAP UI5工程名称
  15. 从腾讯外包月薪5K到转岗正式员工月薪15K,这178天的心酸只有自己知道...
  16. python读取odb_ABAQUS+Python+Script中ODB处理手册
  17. resnet152训练_ResNet改进版来了!可训练网络超过3000层!相同深度精度更高
  18. 关于机器人方面的sci论文_近十年机器人学科中国学者SCI十大发文期刊 - 论文投稿 - 小木虫 - 学术 科研 互动社区...
  19. 委托租赁云服务器协议,委托租赁云服务器协议
  20. 成都涌现大量网游业创业团队:从业人员近3万(网游亦可创业)

热门文章

  1. lua的使用(摘自luachina)
  2. Java 定义一个人类Person
  3. 麻省理工计算机专业,麻省理工学院计算机专业介绍_托普仕留学
  4. 华硕笔记本桌面没有显示计算机,华硕笔记本进不了桌面怎么办
  5. QNX与Linux两家未来有望独霸车载电子操作系统
  6. 鄙人从事IT业已经有9年时间,少壮不努力,长大搞IT
  7. 由于找不到VCRUNTIME140_1.dll,xxx解决方法
  8. Blender齿轮制作
  9. IDEA插件 -RestfulToolkit(接口自测工具)
  10. Spark RDD 论文详解(三)Spark 编程接口