C++ decltype类型提示符总结
定义:
有时会遇到这种情况:希望从表达式的类型推断出要定义的变量的类型,但是不想用该表达式的值初始化变量。为了满足这一要求,C++11新标准引入了第二种类型说明符decltype,它的作用是选择并返回操作数的数据类型。在此过程中编译器分析表达式并得到它的类型,却不实际计算表达式的值:
decltype(f()) sum = x ; // sum的类型就是函数f的返回类型
decltype和顶层const、引用:
如果decltype使用的表达式是一个变量,则decltype返回该变量的类型(包括顶层const和引用在内):
const int ci = 10, &cj = ci;
decltype(ci) x = 0; // x的类型是const int
decltype(cj) y = x; // y的类型是const int&,y绑定到变量x
decltype(cj) z; // 错误:z是一个引用,必须初始化
需要指出:引用从来都是作为其所指的对象的同义词出现,只有在decltype处是一个例外。
decltype和指针:
int i = 42, *p = &i;
decltype(*p) c; // 错误:c是int&,必须初始化
如果表达式的内容是解引用操作,则decltype将得到引用类型。正如我们所熟悉的那样,解引用指针可以得到指针所指的对象,而且还能给这个对象赋值。因此,decltype(*p)的结果类型就是int&,而非int.
需要注意的点:
对于decltype所用的表达式来说,如果变量名加上了一对括号,则得到的类型于不加括号时会有不同。如果decltype使用的是一个不加括号的变量,则得到的结果就是该变量的类型;如果给变量加上了一层或者多层括号,编译器就会把它当作是一个表达式。变量是一种可以作为赋值语句左值的特殊表达式,所以这样的decltype就会得到引用类型。
decltype((i)) d; // 错误:d是int&,必须初始化
decltype(i) e; // 正确:e是一个(未初始化的)int
所以,只有当decltype(variable)的variable本身就是一个引用时才是引用。
本文是对《C++Primer》的知识点总结
C++ decltype类型提示符总结相关推荐
- C++关键字之类型提示符 decltype
类型提示符的原理: 选择并返回操作数的数据结构,在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值. 使用方式: int num = 0; decltype(num++) sun = ...
- C++ decltype类型说明符(尾置返回类型使用)
转自https://blog.csdn.net/yhl_leo/article/details/50865552 1 基本语法 decltype 类型说明符生成指定表达式的类型.在此过程中,编译器分析 ...
- C++ decltype类型说明符
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50865552 1 基本语法 declt ...
- C++11之后的decltype类型指示符
C++11之后的decltype类型指示符 一.什么是decltype类型指示符 二.typeid运算符 三.使用decltype指示符 四.decltype和引用 五.decltype(auto) ...
- [C++]decltype类型指示符
decltype类型指示符 decltype类型指示符:如果你希望从表达式的类型推断出要定义的变量的类型,但是却不想用表达式的值来初始化这个变量,那么你就可以使用decltype关键字,来说明这个变量 ...
- C++11 decltype类型推导详解
decltype decltype 是 C++11 新增的一个关键字,它和 auto 的功能一样,都用来在编译时期进行自动类型推导. decltype 是"declare type" ...
- 二、C++11新特性:decltype类型推导
目录 二.decltype类型推导 2.1. decltype decltype和auto的异同: 2.2.decltype的应用 ①.decltype和typedf/using合用 ②.deltyp ...
- C++ decltype类型推导完全攻略
C++ decltype类型推导完全攻略 decltype 是 C++11 新增的一个关键字,它和 auto 的功能一样,都用来在编译时期进行自动类型推导. decltype 是"decla ...
- C++11之decltype类型推导(使用场景、推导四规则、cv限定符)
系列文章 C++11之正则表达式(regex_match.regex_search.regex_replace) C++11之线程库(Thread.Mutex.atomic.lock_guard.同步 ...
最新文章
- java list 两个集合比较 不存在则新增 存在修改_Java之集合
- create-react-app 脚手架构建项目,搬砖过程中持续总结心得
- leetcode C++ 4. 寻找两个有序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log
- cp无法获取文件状态stat_Node.js从零开始——文件系统
- Twain 学习纪录
- struts2 零配置
- echarts 多次通过setOption改变图形数据时 数据有时不进行变化
- 《 Docker 技术入门与实战 》读书笔记 ( CentOS 安装 Docker )
- Linux 监控命令之 netstat
- 蓝桥杯单片机:11届决赛
- Python演示正多边形逼近圆周过程中计算圆周率近似值
- 移动端向上滑动整个屏幕
- 「leetcode」 1382. 将二叉搜索树变平衡:【构造平衡二叉搜索树】详解
- Axure 安装图标字体元件库
- java使用hdf.jar_在HDFView 2.14上查看使用h5py编写的大(12.5GB)HDF5文件
- android 系统打印服务,调用Android本地服务,实现打印pdf文件
- python安装文件或目录损坏_文件或目录损坏且无法读取的解决办法
- 生如夏花之绚烂,Lisp风格的Lialang诞生了!
- 仿购物网站-HTML手写代码(仅提供参考)
- CollectionView的HeaderView头视图悬停
热门文章
- 维修打包机公司介绍常见打包机故障与维修方法
- 中国人民银行招聘计算机水平,2019中国人民银行招聘计算机模拟试题及答案
- 设备防病毒-深信达MCK(云私钥)
- 2021计算机专业考研科目,2021年考研计算机考试科目
- 人工智能法甲分析报告:揭秘巴黎独霸原因
- 静态网站(博客)生成器Static Site Generators(SSGs)大集合
- 【Java】 # 使用java调用MySQL的函数、存储过程
- java 混淆 ant_Ant编译android,并Proguard代码混淆,v4混淆配置
- 正则表达式实例:取得普陀区所有的小区名字和地址
- Arduino 好盈电调基本控制(PWM)