当前位置: 首页 > news >正文

C7.【C++ Cont】范围for的使用和auto关键字

目录

1.知识回顾

2.范围for

格式

使用

运行结果

 运行过程

范围for的本意

作用

注意

3.底层分析范围for的执行过程

反汇编代码

分析

4.auto关键字

格式

基本用法

在范围for中使用auto


1.知识回顾

for循环的使用参见25.【C语言】循环结构之for文章

2.范围for

C++11中引入范围for

格式

for ( 类型 变量名 : 数组名 )
{//......
}

使用

#include <iostream>
using namespace std;
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };for (int a : arr){cout << a << " ";}return 0;
}

运行结果

 运行过程

范围for的本意

将arr数组中的元素,依次放在a变量中

作用

遍历容器如数组、vector和list等

注意

1.变量的类型和数组的类型要匹配

2.其对数组中所有元素进行遍历的,但是实际在做题的
过程中可能只需要遍历数组中指定个数的元素,此时范围fo不合适

3.范围for不能修改数组元素

3.底层分析范围for的执行过程

运行环境:debug+x86

打开VS2022,先在代码生成中改动两个地方

反汇编代码

#include <iostream>
using namespace std;
int main()
{push        ebp  mov         ebp,esp  sub         esp,78h  push        ebx  push        esi  push        edi  mov         ecx,offset _2A500742_leetcode@cpp (03AE068h)  call        @__CheckForDebuggerJustMyCode@4 (03A1389h)  nop  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };mov         dword ptr [arr],1  mov         dword ptr [ebp-24h],2  mov         dword ptr [ebp-20h],3  mov         dword ptr [ebp-1Ch],4  mov         dword ptr [ebp-18h],5  mov         dword ptr [ebp-14h],6  mov         dword ptr [ebp-10h],7  mov         dword ptr [ebp-0Ch],8  mov         dword ptr [ebp-8],9  mov         dword ptr [ebp-4],0Ah  for (int a : arr)lea         eax,[arr]  mov         dword ptr [ebp-2Ch],eax  mov         eax,dword ptr [ebp-2Ch]  mov         dword ptr [ebp-30h],eax  mov         eax,dword ptr [ebp-2Ch]  add         eax,28h  mov         dword ptr [ebp-34h],eax  jmp         main+7Ah (03A192Ah)  mov         eax,dword ptr [ebp-30h]  add         eax,4  mov         dword ptr [ebp-30h],eax  mov         eax,dword ptr [ebp-30h]  cmp         eax,dword ptr [ebp-34h]  je          main+8Ch (03A193Ch)  mov         eax,dword ptr [ebp-30h]  mov         ecx,dword ptr [eax]  mov         dword ptr [ebp-38h],ecx  {}jmp         main+71h (03A1921h)  return 0;xor         eax,eax  
}pop         edi  pop         esi  pop         ebx  mov         esp,ebp  pop         ebp  ret

分析

上方代码较为复杂,见105.5【x86汇编】底层分析范围for的执行过程

4.auto关键字

之前在C语言的16.【C语言】初识常见关键字 上文章中提到过auto的一点内容

节选内容

auto自动:每个局部变量都由auto修饰,含义:自动创建,自动销毁

                      auto int a=0;等价于int a=0;   

但本文讲的auto与上方不同,其让可让编译器自动推导出变量的类型

格式

auto 变量名 = 变量值;

基本用法

#include <iostream>
using namespace std;
int main()
{auto a = 1;auto b = 1.2;auto c = 'c';return 0;
}

将下列代码用VS2022打开

鼠标放在变量值旁边,会自动显示变量的类型

在范围for中使用auto

直接让编译器推测a的类型,不用手动分析

#include <iostream>
using namespace std;
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };for (auto a : arr){cout << a << " ";}return 0;
}


http://www.mrgr.cn/news/78536.html

相关文章:

  • QT知识整理
  • [免费]SpringBoot+Vue景区订票(购票)系统【论文+源码+SQL脚本】
  • 深度学习创新点不足?试试贝叶斯神经网络!
  • jmeter5.6.3安装教程
  • CMAKE常用命令详解
  • leetcode x 的平方根
  • 深度学习基础3
  • Android Studio安装TalkX AI编程助手
  • 性能监控系统Prometheus、Node-exporter与Grafana部署详解搭建
  • 网络原理(一)—— http
  • 虚拟机ubuntu-20.04.6-live-server搭建OpenStack:Victoria(三:安装服务-controller node)
  • OceanBase 大数据量导入(obloader)
  • React第十节组件之间传值之context
  • SpringBoot实战(三十二)集成 ofdrw,实现 PDF 和 OFD 的转换、SM2 签署OFD
  • 【Electron学习笔记(二)】基于Electron开发应用程序
  • 算法基础 - 求解非线性方程(二分迭代法)
  • 超级详细讲解转义字符,\? \‘ \f \0 \t等等!!!
  • 【科研】9如何高效阅读和理解学术论文
  • C++ 类(Class)
  • Web Worker 和 WebSocket的区别
  • 跨平台应用开发框架(3)-----Qt(样式篇)
  • 自动控制原理——BliBli站_DR_CAN
  • python学习——元组的创建于删除
  • 快速理解微服务中Fegin的概念
  • scrapy爬虫框架小案例
  • JVM:即时编译器,C2 Compiler,堆外内存排查