C++11 auto类型推导

news2024/10/6 18:28:28

1.类型推导

       C++11引入了auto 和 decltype 关键字实现类型推导,通过这两个关键字不仅能方便地获取复杂的类型,而且还能简化书写,提高编码效率。
     

auto 类型推导的语法和规则

       在之前的 C++ 版本中,auto 关键字用来指明变量的存储类型,它和 static 关键字是相对的。auto 表示变量是自动存储的,这也是编译器的默认规则,所以写不写都一样,一般我们也不写,这使得 auto 关键字的存在变得非常鸡肋。

C++11 赋予 auto 关键字新的含义,使用它来做自动类型推导。也就是说,使用了 auto 关键字以后,编译器会在编译期间自动推导出变量的类型,这样我们就不用手动指明变量的数据类型了。

auto 关键字基本的使用语法如下:

auto name = value;

name 是变量的名字,value 是变量的初始值。

注意:auto 仅仅是一个占位符,在编译器期间它会被真正的类型所替代。或者说,C++ 中的变量必须是有明确类型的,只是这个类型是由编译器自己推导出来的。

C11 中 auto 成为类型指示符(type-specifier)。

    auto类型推导: auto 定义的变量,可以根据初始化的值,在编译时推导出变量名的类型示例:

示例:

auto n = 10;
auto f = 12.8;
auto p = &n;
auto url = "http://c.linzeyu.net/cplus/";

第 1 行中,10 是一个整数,默认是 int 类型,所以推导出变量 n 的类型是 int。
第 2 行中,12.8 是一个小数,默认是 double 类型,所以推导出变量 f 的类型是 double。
第 3 行中,&n 的结果是一个 int* 类型的指针,所以推导出变量 p 的类型是 int*。
第 4 行中,由双引号""包围起来的字符串是 const char* 类型,所以推导出变量 url 的类型是 const char*,也即一个常量指针。

 

 auto 和 const 的结合:

int  x = 0;
const  auto n = x;//n 为 const int ,auto 被推导为 int
auto f = n;//f 为 const int,auto 被推导为 int(const 属性被抛弃)
const auto& r1 = x;//r1 为 const int& 类型,auto 被推导为 int
auto& r2 = r1;//r1 为 const int& 类型,auto 被推导为 const int 类型

 

第 2 行代码中,n 为 const int,auto 被推导为 int。
第 3 行代码中,n 为 const int 类型,但是 auto 却被推导为 int 类型,这说明当=右边的表达式带有 const 属性时, auto 不会使用 const 属性,而是直接推导出 non-const 类型。
第 4 行代码中,auto 被推导为 int 类型,这个很容易理解,不再赘述。
第 5 行代码中,r1 是 const int & 类型,auto 也被推导为 const int 类型,这说明当 const 和引用结合时,auto 的推导将保留表达式的 const 类型。

 

 

 结构体中:

 

 在结构体中的属性 只有int 类型能给出变量名和数据名

 数组名退化为一个指针,auto不能修饰数组

 推导返回类型

 

 

 返回值不同时无法推导:

 

 总结:
1、auto不能用于函数参数
2、auto不能用于非静态成员变量
3、 auto 无法定义数组
4、实例化模板时不能使用auto作为模板参数。 

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

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

相关文章

SSL/TLS协议核心原理解析与实战

什么是SSL/TLS SSL(secure sockets layer,安全套接层)安全传输技术。TCP是传输层的协议,但是它是明文传输的,是不安全的。SSL的诞生给TCP加了一层保险,为TCP通信提供安全及数据完整性保护。TLS只是SSL的升…

软件测试银行金融项目如何测?看看资深测试老鸟的总结,一篇足够...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 自动化测试&#x…

如何获取ios打包证书

要获取ios证书,需要去苹果开发者中心注册苹果开发者账号,百度苹果开发者中心即可进入苹果开发者中心官网。 假如你还从来没注册过苹果开发者,你可以参考下面这篇文章先注册成为苹果开发者,必须要有苹果开发者账号才能生成ios打包…

电商客户消费预测模型-基于数千万真实在线零售数据__企业调研_论文科研_毕业设计

之前发过 《谁主沉浮?银行,消金,互联网公司的精准营销_智慧营销完全解读》介绍了智慧营销/精准营销目的是降低运营成本。但精准营销可以带来很多额外收益,例如提高销售利润,提高客户忠诚度,降低客户流失率&…

MySQL的登录与退出(图文讲解)

MySQL的登录 前言一、服务的启动与停止1、方式1:使用图形界面工具2、方式2:使用命令行工具 二、自带客户端的登录与退出1、登录方式1:MySQL自带客户端2、登录方式2:windows命令行3、退出登录 前言 本博主将用CSDN记录软件开发求学…

越秀地产K2流程平台年度报告出炉,来看看“别人家”的流程平台

前不久,越秀地产K2流程平台2022年度运营报告新鲜出炉,K2流程平台再次递交出色成绩单。 2022年,越秀地产在K2流程平台上审批完成的流程共计103万条,日均发起流程数达2800条,日均点击量5万。在大体量、高负荷情形下&…

moment获取指定日期的周x,某月最后一天

安装了moment插件的情况下,使用moment处理时间,原生的Date对象是另一回事。 非官方中文网-文档 1 当前时间 moment() 2 格式化时间 YYYY/yyyy 四位数年份 MM 两位数月份 DD 两位数天 moment().format("YYYY MM DD") 2023 05 26 moment().…

某二手车逆向研究,竟然如此……

目录 一、逆向目标二、网站分析三、加密参数分析四、加密数据分析五、思路总结六、完整项目下载七、作者Info 一、逆向目标 通过抓包技术找出请求头的加密参数,当然也包括cookie,以及响应数据中的加密过的或编码过的数据,通过xhr/fetch请求定…

lidar-camera 标定系统

摘要 本文讨论了一个视觉系统的校准问题,该系统由RGB相机和3D光学雷达(LiDAR)传感器组成。将来自不同模态的两个独立点云进行配准始终是具有挑战性的。我们提出了一种新颖、准确的校准方法,使用已知尺寸的简单纸板箱。我们的方法…

Apache网页安全与安全优化--网页缓存、隐藏版本信息、Apache 防盗链

目录 --------网页缓存-------- 1.检查是否安装 mod_expires 模块 2.如果没有安装mod_expires 模块,重新编译安装 Apache 添加 mod_expires模块 3.配置 mod_expires 模块启用 4.检查安装情况,启动服务 5.测试缓存是否生效 --------隐藏版本信息--…

公开报名|CCPTP云渗透测试认证专家第二期培训班,将在云网基础设施安全国家工程研究中心举办

CCPTP云渗透测试认证专家由云安全联盟大中华区发布,是全球首个云渗透测试能力培养课程及人才培养认证,弥补了国内云渗透测试认知的差距和技能型人才培养的空白。4月1日-13日,CCPTP 首期班成功举办,于2023年5月10日部分学员完成考试…

C语言---函数

1、函数是什么 学习库函数网站: https://cplusplus.com/reference/http://en.cppreference.comhttp://zh.cppreference.com 我们参考文档,学习几个库函数 2、库函数 3、自定义函数 自定义函数和库函数一样,有函数名,返回值类…

TLS协议在ISO13400-2-2019文档中的内容解析

我很久之前写过解读ISO13400文档的系列文章:《详解ISO 13400文档(DoIP协议)》。当时没有说明解读的是哪一版13400,现在回过头看,应该是ISO13400-2-2012版本。那一版里没有TLS协议的相关内容,所以写的文章中也没有体现。 而2019版相比2012版,有两个方面的变化: 增加TLS…

1.AI绘画简介

1.1简介 ​ AI绘画即指人工智能绘画,是一种计算机生成绘画的方式。 ​ AI绘画主要包含两个部分,一个是对图像的分析与判断,即“学习”,一个是对图像的处理和还原,即“输出”。人工智能通过对数以万计的图像及绘画作品…

汽车充电桩主板的构成及7kw交流桩的优势阐述

汽车充电桩主板的构成通常包括:中央处理器、存储器、协议转换芯片、电源管理系统、信号输入输出、充电状态指示灯、电容、电感、电阻等元件。 其中,中央处理器是充电桩的核心,可以对电动汽车进行识别和匹配,根据电动车需求充电&am…

SpringMVC01:SpringMVC的分析和创建

目录 一、Spring MVC:回顾MVC 1、什么是MVC? 2、Model1时代 3、Model2时代 4、回顾Servlet 1.新建一个Maven工程当作父工程!pom依赖 2.建立一个Moudle:springmvc-01-servlet,添加Web app的支持 3.导入servlet和jsp的jar依…

如何使用 Python 进行机器学习?

全套学习路线图、课程,机器学习工作流程如下。 Python人工智能 入门: Python基础→Python数据挖掘中级: 机器学习进阶: NLP自然语言高级: OpenCV基础→深度学习 人工智能学习路线图2023版-黑马程序员人工智能技术路…

Facebook广告投放怎么使用?Facebook广告投放的教程

做跨境电商的,多多少少都离不开广告投放,Facebook广告投放更是很多人的首选,所以东哥今天就来分享一个Facebook广告投放的教程,看完不信你还不会Facebook广告投放! Facebook广告投放的教程 1、用科学上网的方式注册一个…

2023 华为 Datacom-HCIE 真题题库 10--含解析

单项选择题 1.[试题编号:190585] (单选题)华为SD-WAN解决方案中,当CPE位 于NAT设备后的私网时,特别是两个站点的CPE同时位于NAT设备后的私网时,CPE之 间需要使用NAT穿越技术。华为SD-WAN解决方案中使用以下…

vulnhub dc-8

1.信息搜集 端口 22,80,31337 存活ip 192.168.85.136 2.访问网站,进行信息搜集 在欢迎页面发现sql注入 sqlmap进行跑数据 python sqlmap.py -u "http://192.168.85.136/?nid1" --batch -D d7db -T users -C name,pass --dump尝试robots.txt,发现后他登…