decltype关键字
- decltype用于编译时类型推导,是以一个普通表达式作为参数,返回该表达式的类型,而且decltype并不会对表达式进行求值。
- decltype的用法:
//推导出表达式类型
int i = ;
decltype(i) a;//首先推导变量i的类型为int,然后通过返回结果声明变量a,a的类型为int - 在C++中,我们有时候会遇上一些匿名类型,如:
struct{
int d;
double b;
}anon_s;而借助decltype,我们可以重新使用这个匿名的结构体:
decltype(anon_s) as;//定义了一个上面匿名的结构体
- decltype推导四规则:
- 如果e是一个没有带括号的标记符表达式或者类成员访问表达式,那么decltype(e)就是e所命名的实体的类型(注意:如果e是一个被重载的函数,则会导致编译错误)
- 否则,假设e的类型是T,如果e是一个将亡值,那么decltype(e)为T&&
- 否则,假设e的类型为T,如果e是一个左值,那么decltype(e)为T&
- 否则,假设e的类型为T,则decltype(e)为T
- 举例说明:
int i = ;
int arr[] = {};
int *ptr = arr;
struct s
{
double d;
}s;
void Overloaded(int);
void Overloaded(char);//函数重载
int && RvalRef();
const bool Func(int); //规则1,推导为其类型
decltype (arr) var1;//没有括号的标记符表达式,为其实体类型int
decltype(ptr) var2;//没有括号的标记符表达式,为其实体类型int *
decltype(s.d) var3;//没有括号的类成员访问表达式,为其实体类型double
decltype(Overloaded) var4;//重载函数,编译错误 //规则2,将亡值,推导为类型的右值引用
decltype (RvalRef()) var5 = ; //规则3,左值,推导为类型的引用
decltype ((i)) var6 = i; //int &
decltype (true ? i:i) var7 =i;//int &
decltype (++i) var8 =i; //int &
decltype (arr[]) var9 =i;//int &
decltype (*ptr) var10 = i;
decltype ("hello") var11 = "hello";//const char(&) [9],字符串字面常量为左值,且为const左值 //规则4:以上都是不,则推导为本类型
decltype () var12; //const int
decltype (Func()) var = true;//const bool
decltype(i++) var14 = i;//int i++返回右值- 注意:字符串字面值常量为左值,而且是const左值,而非字符串字面常量则是右值
decltype关键字的更多相关文章
- C++11的decltype关键字
C++11的decltype关键字 概述 decltype关键字和auto有异曲同工之处 有时我们希望从表达式的类型推断出要定义的变量类型,但是不想用该表达式的值初始化变量(如果要初始化就用auto了 ...
- C++11特性:decltype关键字
decltype简介 我们之前使用的typeid运算符来查询一个变量的类型,这种类型查询在运行时进行.RTTI机制为每一个类型产生一个type_info类型的数据,而typeid查询返回的变量相应ty ...
- 【C++】C++11的auto和decltype关键字
转自: http://www.linuxidc.com/Linux/2015-02/113568.htm 今天要介绍C++11中两个重要的关键字,即auto和decltype.实际上在C++98中,已 ...
- C++11新标准:decltype关键字
一.decltype意义 有时我们希望从表达式的类型推断出要定义的变量类型,但是不想用该表达式的值初始化变量(如果要初始化就用auto了).为了满足这一需求,C++11新标准引入了decltype类型 ...
- C++11常用特性介绍——decltype关键字
一.decltype的意义 有时我们只想从表达式的类型推断出要定义的变量类型,但是不想用其值进行初始化的时候,C++11新标准引入了decltype类型说明符,它的作用是选择并返回操作数的数据类型,在 ...
- C++—lambda表达式+优先队列 prority_queue+关键字decltype
合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1-&g ...
- C++11 auto and decltype
1.auto关键字 C++新标准引入auto关键词,此auto与之前C语言的auto意义已经不一样了. 这里的auto是修饰未知变量的类型,编译器会通过此变量的初始化自动推导变量的类型. 例如:aut ...
- 你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11)
3.5.2 字符串类型 使用char类型的变量我们可以表示单个字符,那么,我们又该如何表示拥有多个字符的字符串呢? 我们注意到,一个字符串是由多个字符串连起来形成的.很自然地,一种最简单直接的方法就 ...
- C++ 11 学习1:类型自动推导 auto和decltype
Cocos 3.x 用了大量的C++ 11 的东西,所以作为一个C++忠实粉丝,有必要对C++ 11进行一个系统的学习. 使用C++11之前,一定要注意自己使用的编译器对C++11的支持情况,有些编译 ...
随机推荐
- 清北学堂模拟赛2 T2 ball
题目大意: 多组数据,每组给定n,m,表示将n个小球放进m个箱子,每个小球均有两个箱子(可能相同)可放,求所有小球均放好的方案mod998244353的总数. 思路: 算是我和题解思路肥肠相近的一道题 ...
- Tcp 3次握手 4次挥手
Tcp 3次握手 4次挥手 标签(空格分隔): Java基础 报文介绍: SYN(synchronous建立联机) ACK(acknowledgement 确认) FIN(finish结束) PSH( ...
- select rank() over
select * from (select rank() over(partition by barcode order by sheetdate) num, * from ScanRecord wh ...
- android 使用 git 进行版本控制
远程建立仓库 vcs --> import into version control --> create git respository 选中整个工程(project 页面) vcs - ...
- 使用WinDbg分析蓝屏dump原因
大多数人或许都经历过系统蓝屏问题,然而大多数人不清楚该怎么处理蓝屏问题,这里主要对系统蓝屏做一些解释,同时介绍下蓝屏问题分析工具WinDbg分析蓝屏问题的一般步骤. 微软官方对蓝屏的定义是,当系统遇到 ...
- java代码静态分析工具
需求:有些基础类型的遍历,值希望它被赋予指定的几个值,赋予其他值能够别编译器(IDEA/eclipse)提醒 Android studu结合自己的插件,引入 <!-- https://mvnre ...
- redis学习(六)
一.Redis 数据备份与恢复 1.Redis SAVE 命令用于创建当前数据库的备份.该命令将在 redis 安装目录中创建dump.rdb文件. 2.语法:redis 127.0.0.1:6379 ...
- Postman配置Pre-request scripts预请求对请求进行AES加密
1.首先,Postman的Pre-request scripts页面右边已经提供了一些模板,这些模板可以设置变量与环境变量,并使用双大括号对变量进行引用 {{info}} 2.对所有POST请求都进行 ...
- Idea--使用Idea调试设置
参考 https://blog.csdn.net/yyjava/article/details/81453748 关闭一些Idea默认设置,否则懵逼到爆炸.. 1.关闭集合类视图 2.关闭watch视 ...
- JS - 查找字符串中的某个值,截取其之前。和之后的值
var str = "11:222"; /* * 截取 “ :”之前和之后的值 */document.write(str.split(':')[0]) //输出11doc ...