C++ auto关键字 和 基于范围的for循环 语法糖

2023-05-16

目录

  • auto关键字
  • 基于范围的for循环

auto关键字

在C++11中,规定了一个关键字:auto

下面看一下auto的用法:

int main()
{
	int a = 0;
	int b = 0;
	auto c = a;
}

auto可以根据右边的表达式自动推导c的类型,这里c的类型就和a类型一样,是int

其实上面的写法并不是使用auto的最佳用法,在后序的学习中,可能会遇到很长的类型,如果每次都将类型写出来是十分麻烦的,所以这时使用auto,就方便很多

比如在STL中,就会遇到这样类型的变量std::map<std::string, std::string>::iterator ,这里用auto让编译器自己识别,会大大减少麻烦

auto和指针,引用混合使用时:
auto声明指针时,autoauto*是没有区别的,直接用auto

int main()
{
	int x = 10;
	int* px = &x;
	auto a = x;
	auto pa = px;
	auto* pa_ = px;
	return 0;
}

但用auto声明引用类型时则必须加&

int main()
{
	int x = 10;
	int* px = &x;
	auto a = x;
	auto pa = px;
	auto* pa_ = px;
	auto& b = x;
	return 0;
}

需要注意的几点:

  • 使用auto时,必须要进行初始化,因为编译器在编译时会根据后面的类型来推导auto的类型
  • auto不能作为函数形参的类型,编译器无法对a的实际类型进行推导
  • auto不能直接用来声明数组
  • 当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。

基于范围的for循环

下面是我们对一个数组遍历的常用写法:

    int a[] = { 1,2,3,4,5,6,7,8,9,10 };
	int len = sizeof(a) / sizeof(a[0]);
	for (int i = 0; i < len; i++)
	{
		cout << a[i] << " ";
	}
	cout << endl;

其实我们是可以通过auto去实现一个更加简单快捷的数组遍历:

int main()
{

	int a[] = { 1,2,3,4,5,6,7,8,9,10 };
	
	for (auto e : a)
	{
		cout << e << " ";
	}
	cout << endl;
}

这种写法也被称为基于范围的for循环语法糖

  • for循环后的括号由冒号“:分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围

  • 这种语法糖只适用于数组,它的运行本质是依次取数组中的数据赋值给e,自动迭代,自动判断结束

  • for循环迭代的范围必须是确定的,如果某一数组是通过函数传参过来的也是不可以使用此语法糖的,因为传参的数组名其实就是一个指针,不存在范围

上面我们循环遍历了一个数组,下面我们来运用语法糖修改数组

这里想要使用语法糖去修改数组中的值,如果使用普通的类型值,每次都是取数组中的值赋值给e,e的改变不会改变数组中的值,所以这里要使用引用

int main()
{
	int a[] = { 1,2,3,4,5,6,7,8,9,10 };
	
	for (auto& e : a)
	{
		e *= 2;
	}

	for (auto e : a)
	{
		cout << e << " ";
	}
	cout << endl;
}

这里还要说的是:上面的语法糖不是必须使用auto的,for循环中也是可以使用普通类型的,只不过这个类型必须同数组中数据类型一致

//这种写法是可以的
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	for (int i : arr)
	{
		cout << i << " ";
	}
	cout << endl;
}
	
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ auto关键字 和 基于范围的for循环 语法糖 的相关文章

随机推荐

  • 以太网链路聚合与VRRP

    文章目录 一 以太网链路聚合1 1 链路聚合的含义以及作用1 2 链路聚合的配置 二 VRRP2 1 VRRP概述2 2VRRP术语2 3 VRRP工作原理2 4 VRRP的基本配置2 5VRRP总结 三 总结 一 以太网链路聚合 1 1
  • Ubuntu 20.04 系统迁移

    一 前言 现实工作中需要在Intel NUC上装一个Ubuntu 20 04系统 xff0c 并运行ROS以及相关的很多功能包 xff0c 但如果直接安装新新系统 xff0c 之前的大量环境变量要重新去配置 xff0c 所以考虑说将原先的U
  • 电大计算机考试答案

    中央电大计算机基础考试题库大全 基础知识 单选题 1 自计算机问世至今已经经历了四个时代 xff0c 划分时代的主要依据是计算机的 A 规模 B 性能 C 功能 D 构成元件答案 D 2 当前的计算机一般被认为是第四代计算机 xff0c 它
  • 用opencv识别颜色并输出坐标

    1首先安装opencv pip install opencv python 参考https blog csdn net qq 42114833 article details 128648458 spm 61 1001 2014 3001
  • ROS开发(ubuntu)笔记·1

    学习网址 xff1a Introduction GitBook autolabor com cn b站 xff1a 奥特学园 ROS机器人入门课程 ROS理论与实践 零基础教程 哔哩哔哩 bilibili 创建一个ROS Workspace
  • ROS通信机制~话题通信(Publisher&Subscriber)·笔记2

    系列文章目录 xff1a ROS开发 xff08 ubuntu xff09 笔记 1 嘻 嘻的博客 CSDN博客 ROS通信机制 服务通信 server amp client 笔记3 嘻 嘻的博客 CSDN博客 话题通信 理论模型 xff1
  • SDL2.0在linux/ubuntu系统中更新使用指导

    前言 个人喜好原因 xff0c 写OpenGL的程序都喜欢用SDL做框架 xff0c 没有Qt那么臃肿 xff0c 也没有glut那么坑跌 在不失灵活性的情况下保持了自己的轻量 SDL2 0在今年很早的时候时候就发布了 xff0c 几天就来
  • Tensorflow-gpu安装教程(window11和window10一样)

    1 安装最新版Pycharm xff08 最常见的编译器 xff09 下载官网 xff1a https www jetbrains com pycharm 可以安装到D盘 xff0c 版本免费社区版就行 xff0c 推荐装最新版 2 安装最
  • T265 安装(Realsense SDK和Realsense-ros)

    一 写在前面 硬件配置 xff1a Jeston xavier NX 机载电脑 xff0c 板载6002E 设备如图 xff1a T265双目摄像头 二 Realsense SDK和Realsense ros的介绍 在我看来 xff0c R
  • SysTick 定时器的使用

    手册说明 代码模块 SysTick h ifndef SysTick H define SysTick H include 34 system h 34 void SysTick Init u8 SYSCLK void delay us u
  • FreeRTOS互斥量的实验

    互斥量又称互斥信号量 xff08 本质是信号量 xff09 xff0c 是一种特殊的二值信号量 xff0c 它和 信号量不同的是 xff0c 它支持互斥量所有权 递归访问以及防止优先级翻转的特性 xff0c 用于实现对临界资源的独占式处理
  • FreeRTOS cpu利用率简单介绍

    1 CPU 利用率简介 CPU 使用率其实就是系统运行的程序占用的 CPU 资源 xff0c 表示机器在某段时 间程序运行的情况 xff0c 如果这段时间中 xff0c 程序一直在占用 CPU 的使用权 xff0c 那么可 以认为 CPU
  • 直播的推流与拉流如何在uniapp中实现?

    直播的推流和拉流是实现直播功能的两个关键步骤 xff0c 下面是它们的实现方式 xff1a 推流 xff1a 1 采集视频和音频数据 xff1a 使用摄像头和麦克风等设备 xff0c 采集视频和音频数据 2 编码数据 xff1a 将采集到的
  • Windows下GCC安装和使用

    GCC是由GNU开发的编程语言译器 最近复现代码时需要编译源文件 xff0c 总是报错 xff0c 后来查验报错原因后 xff0c 是由于电脑没能安装GCC C 语言编译器用于把源代码编译成最终的可执行程序 但是本人不是很懂编译原理 xff
  • AUTOSAR——AUTOSAR基础

    一 AUTOSAR AUTOSAR全称为 AUTomotive Open System ARchitecture xff0c 译为 汽车开放系统体系结构 二 AUTOSAR核心思想 1 xff09 提倡 在标准上合作 xff0c 在实现上竞
  • 麦克纳姆轮(麦轮)原理

    一 麦轮原理 麦克纳姆轮 xff1a 简称麦轮 xff0c 由轮毂和围绕轮毂的辊子组成 辊子 xff1a 没有动力的从动小滚轮 麦克纳姆轮辊子轴线和轮毂轴线夹角是45度 A轮 xff08 左旋 xff09 与B轮 xff08 右旋 xff0
  • 数据结构——二叉树的先中后序遍历

    本节内容为Bilibili王道考研 数据结构 P43 P45视频内容笔记 目录 一 二叉树的先中后序遍历 1 先中后序遍历 2 举例 3 先中后序遍历和前中后缀的关系 4 代码实现 5 求遍历序列 6 应用 xff1a 求树的深度 二 二叉
  • Ubuntu下使用sshfs/fusemount挂载/卸载远程目录到本地

    Ubuntu下使用sshfs挂载远程目录到本地 访问局域网中其他Ubuntu机器 在不同机器间跳来跳去 很是麻烦 如果能够把远程目录映射到本地无疑会大大方面使用 xff0c 就像Windows下的网络映射盘一样 在Linux的世界无疑也会有
  • 反向代理解决跨域问题

    为什么会产生跨域 js采用的是同源策略 同源策略是指浏览器的一项安全策略 xff0c 浏览器只允许js代码请求和当前所在服务器域名 xff0c 端口号协议相同的数据接口上的数据 xff0c 这就是同源策略 也就是说当协议 xff0c 域名
  • C++ auto关键字 和 基于范围的for循环 语法糖

    目录 auto关键字基于范围的for循环 auto关键字 在C 43 43 11中 xff0c 规定了一个关键字 xff1a auto 下面看一下auto的用法 xff1a span class token keyword int span