当前位置:网站首页>C11新特性——auto、decltype类型指示符
C11新特性——auto、decltype类型指示符
2022-06-29 15:49:00 【仟各】
1、auto类型说明符
(1)auto是让编译器通过初始值来推算变量的类型,因此auto定义的变量必须要有初始值。
(2)auto可以在一条语句中声明多个变量,其中多个边的初始基本数据类型必须一样。
(3)auto 会忽略掉顶层的const,保留底层的const。
例如:
int i=0;
const int a=i;
auto b=a;//这里的b是一个int类型,a的顶层const特性被忽略掉了
auto c=&a;//这里的c是指向整数常量的指针,因此保留了底层的const.(对常量对象取地址是一种底层const)
(4) 设置一个类型为auto 的引用时,初始值中的顶层常量属性仍然保留。
例如:
auto &d=a;//d是对整型常量的引用
2、decltype 类型指示符
(1)decltype能够从表达式的类型推断出要定义的变量的类型,所以不一定用该表达式的值初始化变量。
例如:编译器并不需要调用某个函数,而是可以通过该函数的返回类型来确定需要定义的变量的类型。
(2)如果decltype使用的表达式是一个变量,则decltype返回该变量的类型(包括顶层const和引用在内)。
例如:
const int a=0,&b=a;
decltype(a) x = 0;//x的类型是const int
decltype(b) y = x;//y的类型是const int&
(3)decltype和引用之间需要注意的问题:
①如果decltype使用的表达式不是一个变量,那么decltype返回表达式结果对应的类型。
②如果表达式的内容是解引用操作,则decltype的结果是引用类型。
原因是:解引用指针可以得到指针所指的对象,而且还能给这个对象赋值,所以decltype(*p)的结果是int&,而非int.
例如:
int i=1,*p=&i,&r=i;
decltype(r+1) b;//b是未初始化的int类型
decltype(*p) c;//c是int&,必须初始化
③decltype的表达式如果是加上了括号的变量,结果将是引用。
原因是:加上括号,编译器会把它当成一个表达式,变量是一种可以作为赋值语句左值的特殊表达式,所以 这样的decltype就会得到引用类型。
例如:
decltype((i)) d;//编译出错,因为d是int&,必须初始化
decltype(i) e;//e是一个未初始化的int
边栏推荐
猜你喜欢

#夏日挑战赛# HarmonyOS - 方舟开发框架ArkUI 流光按钮效果

面试官:说一下MySQL事务隔离级别?

Cerebral Cortex:从任务态和静息态脑功能连接预测儿童数学技能

发明了杀毒软件之后,他选择做一个极品混混

The latest agenda of dtcc2022 China database technology conference was released

leetcode:42. 接雨水【双指针很优雅】

迪赛智慧数——其他图表(基本旭日图):毕业演讲高频词

作为开发人员,无代码开发平台 iVX 你有必要了解一下

MySQL常用语句和命令汇总

Interviewer: tell me about the MySQL transaction isolation level?
随机推荐
2022年第一季度保险服务数字化跟踪分析
有望显著提高集成光子电路的计算性能,清华团队提出了一种衍射图神经网络框架
挖财学堂证券开户安全嘛?
面试官:说一下MySQL事务隔离级别?
如何在网站上安装 WordPress
【Try to Hack】XML
Aleph Farms聘请监管事务主管,提前为全球商业化做好准备
瓜分1000+万奖金池,昇腾AI创新大赛2022实力赋能开发者
Key wizard play monster learning - multi window and multi thread background judgment of character, pet blood volume and pet happiness
微博评论高可用高性能计算架构
Sophon Base 3.1 推出MLOps功能,为企业AI能力运营插上翅膀
【Proteus仿真】8位数码管动态扫描显示变化数据
wallys/m.2/Adapter card(one pcie1x to 4 x Mini PCIE)
Daily / June 29, 2022: where is Li Feifei's focus on "embodied intelligence"?
R语言DALEX包的explain函数生成指定分类预测机器学习模型解释器、predict_parts函数基于oscillations方法分析对于指定的某一条样本、每个变量对于预测结国的贡献程度
apache atlas断点查看
Interviewer: tell me about the MySQL transaction isolation level?
When easygbs calls the interface for obtaining real-time snapshots, how to solve the problem of white squares?
Go标准库Context包:单个请求多个goroutine 之间与请求域的数据、取消信号、截止时间等相关操作
按键精灵打怪学习-多窗口多线程后台技能