auto以及增强for循环概念

news/2024/7/3 0:09:44

c++11中auto并不代表一种实际的数据类型,它只是一个类型声明的占位符,auto也并不是再所有场景下都能推导出变量的实际类型,使用auto不需要进行初始化,让编译器推导出它的实际类型,再编译阶段将auto占位符替换为真正的类型。

 auto temp = 2;

auto还可以和指针,引用以及const,在不同的场景下有对应的推导规则.

当变量不是指针或者引用时,推导的结果中不会保留const关键字

当变量是指针或者引用时,推导结果中会保留const关键字

int temp = 110;
auto *a = &temp;    //int
auto b = &temp;    //int *
auto &c = temp;    //int
auto d = temp;    //int
int tmp = 250;
const auto a1 = tmp;    //int
auto a2 = a1;    //int 因为没有声明是指针或者引用所以是int
const auto &a3 = tmp;    //int
auto &a4 = a3;    //const int

 auto的限制

  auto 不能作为函数参数,因为函数参数只有在函数调用的时候才会将实参传入,auto要求必须给修饰的变量赋值

不能定义数组

不能用于类的非常量静态成员变量的初始化

class A
{
public:
    auto c = 2;//报错
    static auto a;//报错,因为静态成员变量需要在类外赋值
    const static auto b = 2;
};

 auto经常应用在STL容器的遍历,其他地方尽量少用,不利于代码阅读

增强for循环

在增强for循环中不需要传递容器需要遍历的范围,循环会自动以容器为范围展开,并且循环屏蔽掉了迭代器的遍历细节,直接抽取容器中的元素进行运算。

如果想要修改遍历的容器,则需要使用引用的方式遍历

如果只读数据,不修改元素的值for(const auto &it:vec)比非引用的效率高一些

注意遍历哈希表时获取的是对象不是迭代器所以要用it.first或者it.second


http://lihuaxi.xjx100.cn/news/1172454.html

相关文章

这才是网络安全最系统的学习路线(建议收藏)

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…

Elasticsearch 8.8.0 发布

Elasticsearch 是一个基于 Lucene 库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,具有 HTTP Web 接口和无模式 JSON 文档。Elasticsearch 基于 Java 开发,并在 SSPL Elastic License 双重授权许可下作为开源软件发布。 Elasticsearch 8…

《Linux运维总结:elasticsearch集群节点类型详解》

一、elasticsearch集群节点类型 在elasticsearch 中,节点可以分为以下几种类型: 1、主节点(master node) 主节点是 elasticsearch集群中的一种特殊节点,主要职责是负责集群操作相关的内容,如创建或删除索…

《微服务实战》 第十八章 Redis查看配置文件和数据类型

前言 本章节讲解如何查看、修改Redis配置,介绍Redis类型。 1、查看配置 config get 配置名称 2、修改配置项 config set 配置项名称 配置项值 2.1、配置项说明 配置项参数说明daemonizeno/yes默认为 no,表示 Redis 不是以守护进程的方式运行&#xff…

springboot+vue学生综合测评系统(java项目源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的学生综合测评系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风…

Git的安装及基础命令

一. 安装Git 首先请前往Git官网去下载最新的安装包:https://git-scm.com/download/win 运行下载好的 .exe 文件,一路next即可。 右击桌面出现以下两个就算是成功。 安装完成后,需要设定用户名和邮箱来区分不同的用户。右击屏幕,选择“Git Bash Here”…

操作系统第一章练习题

目录 问答题 选择题 填空题 判断题 问答题 1、设计现代OS的主要目标是什么? 答:设计现代OS的主要目标是:方便性、有效性、可扩充性、开放性 2、OS的作用可表现在哪几个方面? 答:(1)从一…

RabbitMQ消息持久化机制

上一篇说到生产者消息确认机制,它可以确保消息投递到RabbitMQ的队列中,但是消息发送到RabbitMQ以后,如果MQ宕机,也可能导致消息丢失,所以提出了消息持久化。持久化的主要机制就是将信息写入磁盘,当RabbtiMQ…