C++ auto 关键字

【C++】auto关键字(C++11,超详细解析,小白必看系列) 本文详细解析了C++中的“auto”关键字,介绍了其定义、基本用法、限制和高级用法,特别是与范围for循环和Lambda表达式结合的应用。 阅读详情

转自:C++ auto 关键字 - c&z - 博客园 (cnblogs.com)

 在C++ 98 中,auto 的作用是让变量成为自动变量(拥有自动的生命周期),但是该作用是多余的,变量默认拥有自动的生命周期,在C++ 11 中,已经删除了该用法,取而代之的作用是:自动推断变量的类型。

举例:

  int32_t a = 1;

  auto b = a;

  std::cout <<typeid(b).name() << std::end; // 输出结果:int  typeid运算符可以输出变量的类型

auto 在实际编程中的用法

  对于上面的情形,在实际编程中不推荐,因为不便于他人阅读,直接写出变量的类型会更加的清晰易懂。

1、auto 主要用于代替冗长复杂,变量使用范围专一的变量声明,比如:

  std::vector<std::string> vec;

  for (auto iter = vec.begin(); iter != vec.end(); ++iter) {}

2、auto 在定义函数模板时,用于声明依赖模板参数的变量类型

  模板函数依赖于模板参数的返回值,比如:

  template<typename Tx, typename Ty>

  auto multiply(Tx x, Ty y)

  {

    return x * y;

  }

注意事项:

(1)auto 变量必须在定义时进行初始化操作(这很好理解,如果不进行初始化操作,那么 auto 关键字就不能进行变量类型的推导了)//这个我理解是:auto 声明的变量,并不是执行到auto 这里的时候才去推导,而是在编译阶段就要完成推导。编译时,编译器需要根据初始化的类型来推导auto类型,所以写代码的时候auto声明的地方必须初始化,这个是为了编译时做推导用的。

(2)定义一个 auto 序列的变量时,必须是同一种类型,如:

  auto a = 1, b = 2, c = 3; // 正确

  auto a = 1, b = 2.2, c = 'c'; // 错误(这个道理和第一点注意事项相同)//这个我理解是:遇到auto时就做推导,即简单理解就是 类似于宏定义的展开。auto根据第一个变量的初始化就完成推导了,后面的变量声明,是auto已经确定类型之后的动作。所以,后面变量初始化的类型需要与第一个变量一致,不然声明就不对了。auto a = 1 就推导出auto是int型,那么声明语句其实展开后就是 int a = 1, b = 2.2, c = 'c';  这样写肯定就不对了。编译时就会报错。

(3)如果表达式是引用,则去除引用语义

  int32_t a = 1;

  int32_t& b = a;

  auto c = b; // 此时c的类型被推导为 int32_t,而不是int32_t&

  auto& c = b; // 此时c的类型才是int32_t&(自我理解,定义一个引用,那么就直接操作的是b,而b的类型是int32_t&,所以这里的类型是int32_t&)

(4)如果表达式是const或volatile(或两者都有),则去除const/volatile语义

(5)如果auto关键字带上&号,则不去除const语义

(6)如果表达式为数组,auto关键字推导类型为指针,如:

  int32_t a[3] = {};

  auto arr = a;

  std::cout << typeid(arr).name() << std::end; // 这里输出 int *

(7)如果表达式为数组,且auto带上&,则推导出的类型为数组类型,如:

  int32_t a[3] = {};

  auto& arr = a;

  std::cout <<typeid(arr).name() std::endl; // 这里输出int [3]

但是auto 关键字不能定义数组,比如下面的例子就是错误的:

char url[] = "http://c.biancheng.net/";
auto  str[] = url;  //str 为数组,所以不能使用 auto

(8)函数或模板参数不能被声明为auto

(9)auto不是一个真正的类型,仅仅是一个占位符,不能使用一些以类型为操作数的操作符,如sizeof或typeid

  std::cout << sizeof(auto) std::endl; // 错误

  std::cout << typeid(auto).name() std::endl; // 错误

C++ | auto是什么意思?如何使用?详细讲解 在使用auto时,编译器只会堆第一个类型进行推导,然后用推导出来的类型定义其他变量。在同一行定义多个变量是,这些变量必须是相同的类型。auto “变量名称” = “赋值的内容”; 阅读详情

相关推荐

C++中auto的作用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、C++中auto的用法:二、使用步骤1.引入库2.读入数据总结 前言 1.本人编程萌新一枚,这个号是自学C++及其它有关知识的一些心得体会,欢迎友友们评论区或私信批评指正哈。 2.编程环境:Linux Distributor ID: Debian Description: Debian GNU/Linux 10 vim搭配gGCC/G++ 一、C++中auto的用法: auto是根据后面的值来推测前面的变量类型是什么,其主

蛋炒饭的博客 5641

C++ 入门篇(八) auto关键字

C++ 入门篇(八) auto关键字,结合范围for介绍了自动变量auto的常用场景。 一、auto简介 二、auto的使用场景 三、注意事项 拓、范围for

look_outs的博客 3万+

C++中auto关键字

此前,在C和C++中使用参数必须明确的指出其类型。比如: int i = 5; char c = “a”; double d = 0.5; 在新标准中,通过关键字auto可以实现替代类型说明。比如: auto a = 5; // a为int类型 auto a = “a”; // a为char类型 auto a = 0.5; // a为double类型 这样的代码是不是有点“无类型”的感觉?但实际上...

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1645

C++中auto的使用

1.C++中auto的使用 1.1auto简介 auto是一个C/C++语言存储类型,仅在语句块内部使用,初始化可为任何表达式,其特点是当执行流程进入该语句块的时候初始化可为任何表达式。C语言中提供了存储说明符auto、register、extern、static说明的四种存储类别。四种存储类别说明符有两种存储期:自动存储期和静态存储期。其中auto和register对应自动存储期。具有自动存储期...

qq_38670588的博客 3683

程序化广告行业(23/89):深度剖析广告效果评估指标

大家好,我一直希望能和大家一起在技术领域不断探索、共同进步。在之前的文章中,我们了解了程序化广告中腾讯的业务布局和广告效果评估的基础概念,今天让我们进一步深入剖析广告效果评估的各项指标,这对理解程序化广告的运作机制至关重要

yyy173611的博客 4865

Cherry Studio 新手必看:5分钟搞定MCP服务器配置(附常见问题解决)

本文为Cherry Studio新手提供了详细的MCP服务器配置指南。文章从核心概念入手,解释了Cherry Studio作为MCP客户端如何通过MCP协议安全、标准化地扩展AI助手能力。重点讲解了uv和Bun环境的安装与常见网络问题的解决方案,并演示了如何添加首个MCP服务器(如mcp-server-fetch),助你快速构建可扩展的智能工作流。

corn8的博客 596

【C++】auto关键字

在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量。 C++11中,auto有了全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型 指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。 通俗地讲,auto关键字是可以自动推导变量类型的。 需要注意的是,auto不是一个类型的“声明”,而是一个“占位符”,编译器在编译期会将...

Miss_Monster的博客 6753

S32K3xx系列DMA驱动实战:EB配置与Mcal接口应用全解析(含Adc硬件触发示例)

本文深入解析S32K3xx系列MCU的DMA驱动开发,涵盖EB工具配置与Mcal接口应用,特别包含ADC硬件触发示例。通过详细架构分析、实战配置步骤和工业级应用案例,帮助开发者掌握AUTOSAR环境下DMA高效数据传输技术,提升汽车电子和工业控制系统的性能。

weixin_29162439的博客 466

[C++]C++ auto关键字

早在C++ 98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量(自动变量在控制流进入变量作用域时系统自动为其分配存储空间,并在离开作用域时释放空间),拥有自动的生命周期。函数参数的类型只和函数作用域相关,但是函数的返回类型和函数被调用的作用域相关。在C++ 11中,已经删除了该用法,取而代之的作用是:自动推断变量的类型。,都是把一个指针变为常量,指针所指的内容是可变的。从初始值的类型推断变量本身的类型,变量得到一个初始值的副本。是一个通用的引用类型,既可以是左值引用,又可以是右值引用。

FL1768317420的博客 1038

基于Xilinx_IBERT的光纤接口眼图测试

基于Xilinx_IBERT的光纤接口眼图测试

Coca_Tian的博客 1万+

基于DFT的scanshift sdc模板(DFT)

摘要:本文详细介绍了DFT测试模式下的SDC约束方法。

murphyrong的博客 888

【C++】关键字auto详解

C++中的auto关键字用于自动推导变量的类型,它大大简化了代码书写,尤其是在变量类型复杂或冗长时。以下是关于auto关键字的详细讲解,包括其使用细则、不能推导的场景、以及基于循环中的应用范围。在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,可以思考下为什么?C++11中,标准委员会赋予了autoauto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。

编程知识点梳理、项目经验总结、学习方法分享 1万+

47、利用组策略配置 Windows 防火墙与 IPsec 全解析

本文深入解析了如何利用组策略配置Windows防火墙与IPsec,涵盖防火墙规则基础、IPsec身份验证与加密机制、服务器和域隔离实现方法、WFAS中新旧IPsec规则的区别与配置流程,并详细说明了防火墙属性与规则的优先级计算方式。同时介绍了证书服务、EFS等未详述的安全功能及相关学习资源,帮助管理员通过组策略有效提升网络安全性。

onion的博客 103

C++的auto关键字

为了解决该问题,C++11引入了auto类型说明符,让编译器去分析表达式所属的类型。12是一个int类型的字面值常量,因此auto推断intVal的类型为int。另外要注意的一点是,如果在一个语句用auto声明了多个变量,则初始化这些变量的表达式都必须使对应声明的变量的类型一致12是一个int类型的字面值常量,因此intVal判断出来的是int类型,而0.12是一个double类型的字面值常量,因此doubleVal推断出来的是double类型,两者推断的类型不一致,因此这条语句错误。

cdz2470的博客 1389

AI自瞄原理剖析(四)从Yolo推理坐标到屏幕坐标:基于FOV视角与焦距的坐标变换与精准瞄准

从Yolo推理框架得到的坐标到屏幕坐标的转换是一个涉及到FOV视角、焦距以及分辨率的复杂过程。通过数学公式,我们可以将推理框坐标反推为游戏内的实际坐标,并最终映射到屏幕坐标系中。利用这些信息,AI自瞄系统能够精确计算出准星从当前位置移动到敌人位置的距离,实现精准的自动瞄准。通过这种方法,AI自瞄系统能够在不同的游戏环境下灵活应对,提供高度精确的操作体验。在AI自瞄系统中,目标检测仅仅是第一步,获取到预测框的坐标后,我们还需要将这些坐标转换为实际屏幕上的精确位置。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1334

正确解决Authentication plugin ‘caching _sha2_password’ cannot be loaded:异常的有效解决方法

正确解决Authentication plugin ‘caching _sha2_password’ cannot be loaded:异常的有效解决方法

wbajsjhhhhh的博客 1万+

c++ auto关键字使用

C++11 auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型,类似的关键字还有decltype。举个例子: int a = 10; auto au_a = a;//自动类型推断,au_a为int类型 cout << typeid(au_a).name() << endl; typeid运算符可以输出变量的类型。程序的运...

年轻气盛 温顺尚早 5万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++ auto 关键字

C++98 auto 早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期,这是多余的,因为就算不使用auto声明,变量依旧拥有自动的生命期: int a =10 ; //拥有自动生命期 auto int b = 20 ;//拥有自动生命期 static int c = 30 ;//延长了生命期 C++98中的auto多余且极少使...

252

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

cpp_5.2 auto关键字

auto关键字1 auto关键字被赋予的新含义2 auto使用规则2.1 auto和指针结合使用 ---都一样2.2 auto和引用结合使用 ---要加&区分2.3 auto可以定义多个变量--必须同一类型3 auto不能使用的场景3.1 auto不能作为函数的参数3.2 auto不能直接来声明数组4 auto的使用场景4.1 复杂类型的推演4.2 范围for循环 1 auto关键字被赋予的新含义 在c/c++11之前,auto用来修饰局部变量,表明该变量是一个自动变量,函数结束后该变量销毁。  

weixin_42536748的博客 1280

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++之auto关键字

一、auto简介 在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么? C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型 指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。 #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using nam

qq_42591783的博客 1211

C++ auto关键字

C++98 auto 早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期,这是多余的,因为就算不使用auto声明,变量依旧拥有自动的生命期: int a =10 ; //拥有自动生命期 auto int b = 20 ;//拥有自动生命期 static int c = 30 ;//延长了生命期 C++98中的auto多余且极少使...

zongchenxian341的博客 214

C++ auto 关键字的使用

C++ auto 关键字的使用 https://www.cnblogs.com/KunLunSu/p/7861330.html C++98 auto 早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期,这是多余的,因为就算不使用auto声明,变量依旧拥有自动的生命期: int a =10 ; //拥有自动生命期 auto in...

jacke121的专栏 2405

如何让Dev-C++支持auto关键字

auto关键字是C++11新增功能,在使用Dev-C++编写程序中,涉及到使用auto关键字时,报错,比如: #include<iostream> using namespace std; int main(){ int a[10]; int b[10]; for(int i=0;i<10;i++){ a[i]=i; } for(auto b:a){ cout...

donoot的博客 1万+

C++11中的auto关键字

auto不能用于函数声明中代替返回类型,但在C++14及更高版本中,你可以使用auto在函数声明中的尾置返回类型(trailing return type)来指示函数的返回类型,但这种情况下auto不是用来推导局部变量或函数参数的类型,而是用于指定函数的返回类型依赖于其参数的类型或函数体内的其他逻辑。虽然auto可以推导出指针和引用的类型,但对于复杂的指针和引用类型(如多层指针、指向数组的指针等),auto的使用可能会让代码可读性变差。使用auto可以自动推导迭代器的类型,使代码更简洁。

948

[C++系列] 7. C++auto关键字(C++11)

1. C语言中的auto C语言中提供了存储说明符auto,register,extern,static说明的四种存储类别。四种存储类别说明符有两种存储期:自动存储期和静态存储期。其中auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块是被建立,它在该程序块活动时存在,退出该程序块时撤销。 在函数内部定义的变量成为局部变量。在某些C语言教材中,局部变量称为自动变...

Y-puyu 的博客 3308
上一篇: c++ 拷贝构造函数的一点理解
ChingDawn
博客等级 码龄11年 17粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值