C++11 decltype 的用法粗解
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 的用法粗解相关推荐
- C++11 decltype类型推导详解
decltype decltype 是 C++11 新增的一个关键字,它和 auto 的功能一样,都用来在编译时期进行自动类型推导. decltype 是"declare type" ...
- Django基础(11): 表单集合Formset的高级用法详解
Formset(表单集)是多个表单的集合.Formset在Web开发中应用很普遍,它可以让用户在同一个页面上提交多张表单,一键添加多个数据,比如一个页面上添加多个用户信息.今天小编我就介绍下Djang ...
- C++ 实现 STL 标准库和算法(二)template 编程和迭代器粗解 实验楼笔记
一.template 编程和迭代器粗解 1.1 实验内容 本节内容主要讲述 c++11 模板的用法,以后的代码中会大量的用到模板的知识.同时简单讲解迭代器的相关知识,为后面容器和算法的内容作铺垫. 1 ...
- Ext.Net学习笔记22:Ext.Net Tree 用法详解
上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat="server"><Root> ...
- RxJava flatMap操作符用法详解
RxJava系列文章目录导读: 一.RxJava create操作符的用法和源码分析 二.RxJava map操作符用法详解 三.RxJava flatMap操作符用法详解 四.RxJava conc ...
- c++中vector的用法详解
c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...
- Linux下的awk用法详解
Linux下的awk用法详解 一.awk介绍 二.awk的语法 三.awk常见用法 四.awk其他用法 五.awk语言特性 一.awk介绍 1.AWK 是一种处理文本文件的语言,是一个强大的文本分析工 ...
- 68.connect-flash 用法详解 req,flash()
转自:http://yunkus.com/connect-flash-usage/ connect-flash 用法详解 前端工具 2016-10-05 2016-10-05 朝夕熊 11 ...
- 教程-Delphi中Spcomm使用属性及用法详解
Delphi中Spcomm使用属性及用法详解 Delphi是一种具有 功能强大.简便易用和代码执行速度快等优点的可视化快速应用开发工具,它在构架企业信息系统方面发挥着越来越重要的作用,许多程序员愿意选 ...
最新文章
- 编写图形界面程序,显示一个红色反弹球的程序,当该球撞击Applet边框时,它应从边框弹回并以相反方向45°运动。
- C++ POD(Plain Old Data)类型
- primefaces_懒惰的JSF Primefaces数据表分页–第2部分
- 这篇看完我得理解ES6中中常见语法
- 云电脑是什么_云电脑和我们现在平时用的电脑有什么区别?
- phpstudy apache无法启动_phpstudy和wamp哪个好
- Mapbox词汇表中文文档(查找Mapbox相关的术语及其定义)
- ES6(一) —— 异步编程解决办法[从回调函数到promise,generator,async]
- Error while executing: am start -n错误解决方案
- 编程基本功:代码都写不好,还写什么注释
- win10 64位系统 excel2016 vba odbc方式 访问 oracle远程数据库 免安装oracle客户端
- linux 一键安装字体,在deepin中一键安装喜欢的字体,文档气质瞬间提升!
- IDEA 当前项目jdk版本查看
- 通过命名空间快速定位SAP UI5工程名称
- 从腾讯外包月薪5K到转岗正式员工月薪15K,这178天的心酸只有自己知道...
- python读取odb_ABAQUS+Python+Script中ODB处理手册
- resnet152训练_ResNet改进版来了!可训练网络超过3000层!相同深度精度更高
- 关于机器人方面的sci论文_近十年机器人学科中国学者SCI十大发文期刊 - 论文投稿 - 小木虫 - 学术 科研 互动社区...
- 委托租赁云服务器协议,委托租赁云服务器协议
- 成都涌现大量网游业创业团队:从业人员近3万(网游亦可创业)
热门文章
- lua的使用(摘自luachina)
- Java 定义一个人类Person
- 麻省理工计算机专业,麻省理工学院计算机专业介绍_托普仕留学
- 华硕笔记本桌面没有显示计算机,华硕笔记本进不了桌面怎么办
- QNX与Linux两家未来有望独霸车载电子操作系统
- 鄙人从事IT业已经有9年时间,少壮不努力,长大搞IT
- 由于找不到VCRUNTIME140_1.dll,xxx解决方法
- Blender齿轮制作
- IDEA插件 -RestfulToolkit(接口自测工具)
- Spark RDD 论文详解(三)Spark 编程接口