c++里在获取一个表达式的数据类型的时候。就是使用decltype()来获取。下面介绍下它的一些特性:

1.延迟性

decltype(f()) sum = x;

sum 的数据类型是函数f()的返回类型。但是,这得需要f()执行结束(ps:与auto不同,这里不实际计算结果)。

decltype 处理顶层const和引用的方式与auto有些不同, auto会忽略,但是decltype()不会。例如:

const int ci = 0, &cj = ci;

deltype(ci) x = 0; ---------x的数据类型是const int

decltype(cj) y = x; -------------y 的数据类型是const int&. y引用了x。

2.decltype()和引用的组合。

-------------如果变量不是一个普通的表达式,那么decltype()返回的是对应结果的数据类型。

-------------如果表达式里有解引用符,那么decltype()的结果将是引用类型。

-------------如果表达式在一层或多层括号()内,那么decltype()的结果将是引用类型。

例如:

int i = 10, *p = &i, &r = i;

decltype(r + 0) b;-----------加法的结果是int, b是int 类型。

decltype(*p) c = 20;--------c是int&。因为表达式里有解引用符。

decltype((i)) d = 10;---------d的数据类型是整型引用int&。

ps: 和auto对比?

int a = 3;

auto c1 = a; c1的数据类型是int

decltype(a) c2 = a; c2的数据类型是int

decltype((a)) c3 = a; c3的数据类型是int&

const int d = 5;

auto f1 = d; f1的数据类型是int

decltype(d) f2 = d; f2的数据类型是const int

C++的decltype()的介绍相关推荐

  1. decltype的介绍

    摘抄一段关于decltype的介绍 decltype 类型指示符 decltype和引用 decltype 我仅仅是本文的搬运工,关于decltype关键字<C++ Primer>这本书算 ...

  2. decltype用法介绍

    想从表达式推断出要定义的变量的类型,但不想计算表达式的值,此时可以使用decltype 语法是:delctype(表达式),其中表达式可以是变量.函数.数组等. #include <typein ...

  3. C++11新特性之decltype关键字的使用

    一.decltype关键字介绍 decltype关键字与auto关键字相似,但又有不同之处:auto关键字是在编译时通过已经初始化的变量来确定auto所代表的类型.换句话说,auto修饰的表达式必须是 ...

  4. C++11中头文件type_traits介绍

    C++11中的头文件type_traits定义了一系列模板类,在编译期获得某一参数.某一变量.某一个类等等类型信息,主要做静态检查. 此头文件包含三部分: (1).Helper类:帮助创建编译时常量的 ...

  5. 《C++ Primer 第五版》第二章(第5小节)——using和typedef,auto和decltype总结

    1.using和typedef(作用:定义类型别名) 1)typedef和using都可以用来定义一个类型别名,二者在类型别名上定义没有区别.只是需要注意的是类型和类型别名的顺序,使用typedef定 ...

  6. C语言的VC开发环境界面介绍,【c语言在vc++6.0中编写界面程序】

    到现在为止,C++ 仍然是计算机编程领域的经典语言之一,C++ 17 标准在2017上半年已经探讨确定.本期我们汇集了编程专家--祁宇(<深入应用 C++ 11>作者,C++ 开源社区 p ...

  7. c++11中的declval和decltype

    一.declval的介绍 std::declval定义在头文件中: template<class T> typename std::add_rvalue_reference<T> ...

  8. Delphi历史版本介绍(二)从Delphi8到DelphiXE3

    Delphi历史版本介绍(二)从Delphi8到DelphiXE3 Delphi 8 Delphi8是一个短命的版本,有点像微软的vista的感觉,没有很好的超越7,后来用被2005取代,很多人都是直 ...

  9. Android Q app内存压缩优化方案介绍

    Android Q app内存压缩优化方案介绍 原创文章,谢绝转载! Android Q新增了部分系统性能优化方案,这里简单学习下,本篇文章先分析app compaction. 一.愿景: 在保证后台 ...

最新文章

  1. Linux系统管理工具-iostat、free、ps、netstat、tcpdump
  2. Windows核心编程 第六章 线程基础知识 (上)
  3. Programming Computer Vision with Python (学习笔记三)
  4. 微信抢红包的方案_免费公开实收20000的烤鸭店营销方案,餐饮行业可复用
  5. java构造方法和实例化,10. JavaSE-子类实例化过程 构造方法间调用
  6. 移动开发的跨平台技术发展史 | 技术头条
  7. myBatis的xml映射文件中传入list集合与数组做条件
  8. python基础教程免费视频-零基础小白python从入门到精通视频(全60集)
  9. LeetCode 583 两个字符串的删除操作
  10. display:block jquery.sort()
  11. ZED2 ROS下bag包的录制与回放数据
  12. Android-Handler机制简述
  13. 大数据告诉你:逃离北上广的人最后都去了哪里?
  14. 【shell】shell是什么,shell脚本又是什么?
  15. 大数据兼云计算(王明龙)讲师-JAVA-DAY05-基本数据类型
  16. 大数据人才如此稀缺,学什么专业才能从事大数据?
  17. C语言每日一练——第28天:要求输出国际象棋棋盘
  18. 小云管家(Rotor):一款开源的效率工具箱
  19. 修改WSL的Ubuntu环境下ls显示的文件夹文字颜色和背景色
  20. RK3399平台开发系列讲解(硬件波形解析篇)10.1、USB2.0相关硬件波形(实图)解析

热门文章

  1. boost::histogram模块实现导向轴的测试程序
  2. boost::geometry模块实现自定义Linestring示例
  3. boost::filesystem模块打印文件的大小的测试程序
  4. GDCM:gdcm::StrictScanner的测试程序
  5. boost::callable_traits添加member_cv的测试程序
  6. DCMTK:CT位置FG类测试
  7. VTK:Math之EigenSymmetric
  8. OpenCV导出模板参数文件
  9. OpenGL Compute Shader计算着色器的实例
  10. C++实现complex number复数的算法(附完整源码)