decltype推导规则

decltype推导规则

当用decltype(e)来获取类型时,编译器将依序判断以下四规则:

1.如果e是一个没有带括号的标记符表达式(id-expression)或者类成员访问表达式,那么decltype(e)就是e所命名的实体的类型。此外,如果e是一个被重载的函数,则会导致编译时错误。
2.否则,假设e的类型是T,如果e是一个将亡值(xvalue),那么decltype(e)为T&&。
3.否则,假设e的类型是T,如果e是一个左值,则decltype(e)为T&。
4.否则,假设e的类型是T,则decltype(e)为T。

标记表达式:基本上,所有出去关键字、字面量等编译器需要使用的标记之外的程序员自定义的标记(token)都可以是标记符(identifier)。而单个标记符对应的表达式就是标记符表达式。比如:int arr[4];
则arr是一个标记符表达式,而arr[3]+0、arr[2]等,则都不是标记符表达式。
通过代码理解:

int arr[5] = {0};
int* ptr = arr;
struct S {double d;} s;
void Overload(int);
void Overload(char);	//重载函数
int&& RvalRef();
const bool Func(int);
int i = 0;//规则1:单个标记符表达式以及访问类成员,推导为本类型
decltype(arr) var1; // int[5],标记符表达式
decltype(ptr) var2; // int*,标记符表达式
decltype(s.d) var3; // double,成员访问表达式
decltype(Overload) var4; // 重载函数无法通过编译//规则2:将亡值推导为类型的右值引用
decltype(RvalRef()) var5 = 1; //int&&//规则3:左值推导为类型的引用
decltype(true ? i : i) var6 = i; //int&,三元运算符,返回一个i的左值
decltype((i)) var7 = i; //int&,带圆括号的左值
decltype(++i) var8 = i; //int&,++i返回i,i是左值
decltype(arr[3]) var9 = i; //int&, []操作符返回左值
decltype(*ptr) var10 = i; //int&,*解引用操作符返回左值
decltype("lval") var11 = "abc"; //const char(&)[] 类型是字符型常量数组的引用,字符串字面常量为左值//规则4:以上都不是,推导为本类型
decltype(1) var12; //int,除字符串外的字面量为纯右值
decltype(i++) var13; //int,后置自增符返回的是i的临时复制变量,是纯右值
decltype((Func(i))); //const int,括号可以忽略

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1555962.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

k8s 中存储之 NFS 卷

目录 1 NFS 卷的介绍 2 NFS 卷的实践操作 2.1 部署一台 NFS 共享主机 2.2 在所有k8s节点中安装nfs-utils 2.3 部署nfs卷 2.3.1 生成 pod 清单文件 2.3.2 修改 pod 清单文件增加 实现 NFS卷 挂载的 参数 2.3.3 声明签单文件并查看是否创建成功 2.3.4 在 NFS 服务器 创建默认发布…

思维导图工具,轻松搞定复杂问题!

一提到思维导图,想必大家都不会陌生;它能帮助我们更好地梳理思路,让复杂的想法变得清晰可见;而随着互联网的普及,在线思维导图工具更是成为了我们日常工作和学习的得力助手;今天,我就来给大家推…

小红书算法岗面试,竞争太激烈了

最近已有不少大厂都在秋招宣讲了,也有一些在 Offer 发放阶段。 节前,我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了…

【Kubernetes】常见面试题汇总(五十八)

目录 127.创建 PV 失败? 128. pod 无法挂载 PVC? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二)” 。 题目 69-113 属于【Kubernetes】…

一个月学会Java 第4天 运算符和数据转换

Day4 运算符和数据转换 今天来讲运算符,每个运算符的作用和现象,首先我们先复习一下数据类型, day2讲过基本数据类型有八种,int、short、long、byte、char、boolean、float、double,分别为四个整型、一个字符型、一个布…

基于springboot vue3 在线考试系统设计与实现 源码数据库 文档

博主介绍:专注于Java(springboot ssm springcloud等开发框架) vue .net php phython node.js uniapp小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆…

电脑断网或者经常断网怎么办?

1、首先,按一下键盘的win R , 在打开的运行框内输入:cmd 然后按一下回车 或者 点击一下【确定】 2、在命令窗口输入:ipconfig/release , 然后按一下回车 作用:IP释放,相当于把网线拔了重新插上 3、接着…

佳能基于SPAD的监控摄像机MS-500入选《时代》2023最佳发明

一、产品概述 佳能MS-500是一款采用SPAD(Single Photon Avalanche Diode,单光子雪崩二极管)传感器的监控摄像机。SPAD传感器以其极高的灵敏度和在低光环境下的卓越表现而闻名,使得MS-500能够在夜晚或极暗光条件下拍摄到清晰、彩色的画面。此外,MS-500还配置了高性能的镜头…

Python异常处理中的9个常见错误及其解决办法,建议收藏

在Python编程中,异常处理是确保程序健壮性和可靠性的重要部分。然而,在使用异常处理时,开发者可能会犯一些常见的错误。以下是9个常见的异常处理错误及其解决办法: 1. 语法错误 (SyntaxError) 语法错误是最常见的错误之一。它通…

【梯级水电站调度优化】基于线性递减策略优化粒子群算法

课题名称: 基于改进粒子群算法的梯级水电站调度优化 改进方向: 线性递减策略优化粒子群PSO 代码获取方式(付费): 相关资料: 1. 粒子群算法的基本原理 2. 梯级水电站调度优化模型 3. 代码注释 4. 代码…

第十一章 缓存之更新/穿透/雪崩/击穿

目录 一、什么是缓存 二、缓存更新策略 2.1. 缓存主动更新策略 2.1.1. Cache Aside模式(主流)‌ 2.1.2. Read/Write Through模式‌ 2.1‌.3. Write Behind模式‌ 2.1.4. 总结 三、缓存穿透 四、缓存雪崩 五、缓存击穿 本文中的图片内容部分来源…

【笔记】神领物流Day1.1.20权限管家

传智权限管家是一个通用的权限管理中台服务,在神领物流项目中,我们使用权限系统管理企业内部员工,比如:快递员、司机、管理员等。 在权限管家中可以管理用户,管理后台系统的菜单,以及角色的管理。 权限管家…

视频加字幕用什么软件最快?12款工具快速添加字幕!

对于大多数同学来讲,剪辑中比较头疼的就是如何给视频加字幕和唱词啦,特别是用Pr或者FCXP等专业剪辑软件,加字幕也是特别费时的,哪怕是有批量添加的功能orz... 虽然关于这方面的内容已经很多啦,但是真正全面的内容还特…

哈希闭散列的实现与机制

目录 哈希的介绍 哈希冲突 原因 影响 解决方法 实例 哈希函数 哈希函数设计原则: 常见哈希函数 闭散列 线性探测的实现 代码解读 1. 命名空间和枚举定义 2. 哈希表节点结构体 3. 哈希函数模板 4. 哈希表类 5. 插入、查找和删除逻辑 二次探测 哈希的…

【React】事件机制

事件机制 react 基于浏览器的事件机制自身实现了一套事件机制,称为合成事件。比如:onclick -> onClick 获取原生事件:e.nativeEvent onClick 并不会将事件代理函数绑定到真实的 DOM节点上,而是将所有的事件绑定到结构的最外层…

latex本地运行(MiKTeX+VScode)-20241006

1、安装 LaTex 主流的分发版本应该就是 TeXLive 和 MikTeX 了,这里使用 MikTex(只有几百M)—— TeXLive 太大了、默认安装全部包,可选自选部分安装单实在有些许麻烦,MikTeX 则方便得多,需要的时候可以自动安装全部包 点击跳转到 MiKTeX 官网,直接下载即可:不用担心什…

体系结构论文(五十五):Full Stack Optimization of Transformer Inference

Full Stack Optimization of Transformer Inference 一、文章介绍 背景 Transformer模型被广泛应用于各种任务,如计算机视觉、自然语言处理、语音识别等,原因是它们的准确度很高。然而,这些模型的复杂性和规模不断增加,导致它们…

连续时间傅里叶变换

一、非周期信号的表示:连续时间傅里叶变换 傅里叶变换对: 通常称为的频谱 二、傅里叶变换的收敛 1、绝对可积 2、在任何有限区间内,只有有限个最大值和最小值 3、在任何有限区间内,有有限个不连续点,且在每个不连…

信息安全工程师(36)访问控制主要产品与技术指标

前言 访问控制是确保系统资源安全的重要手段,其主要产品和技术指标对于理解和实施有效的访问控制策略至关重要。 一、访问控制主要产品 访问控制产品种类繁多,根据应用场景和需求的不同,可以分为以下几类: 防火墙: 功能…

Linux环境搭建(云服务器)

前言 Linux是一款由林纳斯托瓦兹开源的操作系统,时至今日拥有着丰富的讨论资源和系统完整性,基本普及于市场中的公司内部,所以有着很大的学习价值。学习Linux主要分为两大部分,一是学习Linux的系统操作,包括且不限于掌…