c++中的auto、const auto&

现代C++编程:掌握auto类型推导与范围for循环提升开发效率 在C++编程中,类型系统和循环控制是基础且核心的概念。传统C++代码需要显式声明冗长的类型并手动管理迭代器,这不仅增加了编码负担,也容易引入错误。现代C++通过编译期类型推导和简化遍历语法,从根本上优化了开发体验。自动类型推导(auto)允许编译器根据初始化表达式推断变量类型,遵循模板参数推导规则,能正确处理值类型、引用和万能引用。基于范围的for循环则通过自动获取容器的起止迭代器,让遍历操作更直观安全。这两项技术的核心价值在于提升代码的可读性、编写正确率和维护性,尤其适用于模板编程、复杂容器操作和算法实现 阅读详情

先介绍一下auto、const:

    在块作用域、命名作用域、循环初始化语句等等  中声明变量时,关键词auto用作类型指定符。

   const:修饰符

接下来我们细细分析一下:

(1)auto

    auto即 for(auto x:range)  这样会拷贝一份range元素,而不会改变range中元素;

 但是!(重点)  使用for(auto x:vector<bool>)时得到一个proxy class,操作时会改变vector<bool>本身元素。应用:for(bool x:vector<bool>)

(2)auto&

   当需要修改range中元素,用for(auto& x:range)

 当vector<bool>返回临时对象,使用auto&会编译错误,临时对象不能绑在non-const l-value reference (左值引用)需使用auto&&,初始化右值时也可捕获

(3)const auto&

     当只想读取range中元素时,使用const auto&,如:for(const auto&x:range),它不会进行拷贝,也不会修改range   

(4)const auto

    当                                                                                                                                                                                                                                                                     需要拷贝元素,但不可修改拷贝出来的值时,使用 for(const auto x:range),避免拷贝开销                                                                                                       

整理一下:

   想要拷贝元素:for(auto x:range)

   想要修改元素 :  for(auto &&x:range)

   想要只读元素:for(const auto& x:range)        
Win11上WSL2安装Ubuntu22.04避坑指南:从镜像源到C++环境配置 本文详细介绍了在Win11系统上安装和配置WSL2及Ubuntu22.04开发环境的完整流程与避坑指南。内容涵盖从解决网络安装错误、更换国内镜像源以加速软件更新,到一站式配置C++开发工具链(包括GCC、GDB、CMake等),并提供了提升WSL2使用体验的实用技巧和故障排除方法,帮助开发者高效搭建稳定的Linux开发环境。 阅读详情

相关推荐

APB Timer验证环境搭建——学习笔记(1)

以下为个人学习笔记,如有疏漏,请大家指正补充~~APB Timer是一个简单的下行计数器,包括一个32位计数器和一组比较器,可以实现多种计时功能。包括生成一次性中断或者定时中断。

qq_41651535的博客 1578

const auto&的作用

本文记录了const auto&的作用

chen_znn的博客 2624

ComfyUI-Impact-Subpack插件安装避坑指南:为什么你的UltralyticsDetectorProvider节点还是找不到?

本文深入解析了ComfyUI-Impact-Subpack插件的安装与排障问题,特别是针对UltralyticsDetectorProvider节点缺失的常见问题提供了详细的解决方案。从底层机制到高阶应用,涵盖了手动安装、模型配置、性能优化等关键步骤,帮助用户彻底解决插件依赖关系断裂问题。

Jerry的专栏 1152

C++入门之auto关键字&&内联函数

延续之前的C++入门,本篇介绍C++的auto关键字的使用方法以及内联函数在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么?C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得return 10;int a = 10;auto b = a;

Ruiren_的博客 3595

STM32F407+LWIP实战:NETCONN接口TCP服务器避坑指南(附正点原子例程解析)

本文深入解析了基于STM32F407和LWIP协议栈构建高响应TCP服务器的实战要点。针对使用NETCONN接口时常见的连接不稳定、数据延迟及内存泄漏等问题,提供了从NETCONN运行模型、服务器实现、参数优化到内存管理的全方位避坑指南,并结合正点原子例程,给出了具体的调试技巧与解决方案。

weixin_29188043的博客 403

2025小红书跳转卡片实战指南:从零搭建独立后台与自动化发卡系统

本文提供了一份2025年小红书跳转卡片的实战搭建指南,详细解析了独立后台系统的核心架构与自动化发卡流程。文章从零开始,手把手教你使用Node.js、Vue.js等技术栈构建包含后台管理、用户制卡中心与前端交互的完整系统,旨在帮助运营者实现合规引流,并掌握数据自主权与自动化运营能力。

weixin_29234423的博客 518

算法笔记 C++中const和auto的那些事 HERODING的算法之路

C++中const和auto的那些事前言1. const1.1 const修饰普通类型的变量1.2 const 修饰指针变量1.2.1 常量指针1.2.2 指针常量1.2.3 指向常量的常指针1.2.4 三者区别2. auto2.1 auto的用法2.2 auto的注意事项3. const与auto4. 总结 前言 最近做题在暴力的时候发现了一个问题,就是在一些数据量很大的时候(游离于内存的超出范围),如果是const auto&amp; 遍历就不会出问题,但是auto或者const auto仍然会超时,所

HERODING23的博客 5091

C++11:右值和右值引用

左值和右值是独立于他们的类型的,右值引用类型可能是左值也可能是右值。编译器会将已命名的右值引用视为左值,将未命名的右值引用视为右值。auto&&或者函数参数类型自动推导的T&&是一个未定的引用类型,它可能是左值引用也可能是右值引用类型,这取决于初始化的值类型。通过右值推导 T&& 或者 auto&& 得到的是一个右值引用类型,其余都是左值引用类型。......

oorik的博客 1625

EMD (经验模态分解) 在 C++ 中的实现指南

EMD 是由 Norden E. Huang 等人在1998年提出的一种适用于非线性和非平稳信号的分析方法。对称性:IMF 的上下包络对称。零交叉点:IMF 的零交叉点数量与极值点数量相同或相差一个。本文详细介绍了如何在C++中实现EMD,包括理论背景、算法步骤、代码实现和优化等内容。通过丰富的代码示例和详细的解释,希望能够帮助读者掌握EMD的基本原理,并能够在实际项目中灵活应用。未来,随着信号处理技术的不断发展,EMD及其变种(如EEMD、CEEMDAN等)将继续在各个领域发挥重要作用。

qq_38334677的博客 1749

如何对正射影像DOM(卫星影像、无人机航拍影像)进行拼接、合并以及去黑边(附 Global Mapper Pro 24.0 安装包(中文注册版))

为什么要对正射影像DOM进行拼接?影像去黑边、影像拼接的操作和步骤。

从地图看世界的专栏 4300

C++ 中的auto、auto&、auto&&、const auto&

/* * @Description: * @Author: CM * @Date: 2021-04-23 14:23:56 * @LastEditTime: 2021-04-23 14:40:13 * @LastEditors: CM */ #include <iostream> #include <vector> using namespace std; class A { public: /* 构造函数 */ A() {

weixin_42442319的博客 1万+

YOLOv11安卓端部署终极指南:从训练到NCNN移植,30分钟搞定手机实时检测!

本文详细介绍了YOLOv11模型在安卓设备上的NCNN部署全流程。主要内容包括:1) 环境配置要求(Python3.8+、PyTorch、NCNN框架等);2) COCO2017数据集准备与配置;3) 模型训练建议(使用RTX3090,50-100个epoch);4) 模型导出转换步骤(ONNX格式转换、NCNN优化);5) 安卓端实现的关键优化(快速sigmoid实现、纯C++NMS等)。项目在安卓CPU模式下可实现20FPS的稳定检测,并提供了激活函数选择、模型量化等性能调优建议。通过参考多个开源项目,

FJN110的博客 1726

c++中的auto、auto&、const auto&等

auto:在块作用域、命名作用域、循环初始化语句等中声明变量时,关键词auto用作类型指定符。 const:修饰符 ​想要拷贝元素:for(auto x:range) ​ 想要修改元素:for(auto &x:range) ​ 想要只读元素:for(const auto&amp; x:range) auto auto即 for(auto x:range) 这样会拷贝一份range元素,而不会改变range中元素; 但是!(重点)使用for(auto x:vector)时得到一个prox

LiuXF93的博客 2619

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C++11 range-for 中的auto,auto&, auto&&, const auto&

C++ range-for auto auto& auto&&

ibos168的博客 3070

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C++ auto用法及应用详解

C++ auto用法及应用详解1.auto的推导规则2.auto1.1 auto例子1.2 const auto例子3.声明为auto引用:auto &4.auto在编程时真正的用途4.1代替冗长复杂的变量声明4.2定义模板参数时,用于声明依赖模板参数的变量4.3模板函数依赖于模板参数的返回值 编程时常常需要把表达式的值赋给变量,这就要求声明变量时清楚的知道表达式的类型。然而有些情况是声明的变量的类型我们并不知道,比如在模板编程时。为了解决这个问题,C++11引入了auto类型说明符,用它来让编译器

weixin_43744293的博客 8万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

auto, auto&, const auto&以及其它形式的auto变种在for-range loop的选择

首先看第一种情况,auto, 即for(auto x : range)。这一种用法将会为range的每一种元素都创建一份拷贝,所以当你不想改变range里面的元素而想拷贝时,使用这一种用法。 for(auto&amp; x : range),当你想要修改range(不含有proxy class reference处理时)里面的元素时,使用auto&amp;. auto&amp;& 这就是两全其美的办法,for(auto && x : range). 当被左值初始化时,auto&amp

AbiUni(YY熊) 1039

c++ 中 auto, auto & 和 const auto & 的区别

c++ 中 auto,auto & 和 const auto & 的区别。

lele_ne的博客 3117

C++11的类型推导——auto

auto不能⾃动推导出引⽤类型,所以我们如果想将auto推导为引⽤类型,需要明确的写:auto &x=i(i是引用);ri1是ci的引用,而ri1推导时类型是引用对象的类型(上面的引用规则,和ri1、ri2前面的const没关系了,因为是引用推导)因此ri1是顶层const(ci的),而auto推导r4又会忽略顶层const,ci因此r4类型为int。⾸先使⽤引⽤其实是使⽤引⽤的对象,特别是当引⽤被⽤作初始值时,真正参与初始化的其实是引⽤对象的值,所以编译器推导auto为引⽤对象的类型,⽽不是引⽤。

czt230610的博客 571

auto和const auto&的用法

1.auto即for(auto x:range) 会拷贝一份range元素,不会改变range中的元素; 2.只读取range中的元素,使用const auto&amp;,如:for(const auto&amp;x:range),它不会进行拷贝,也不会修改range,效率会比用auto快一点。 想要拷贝元素:for(auto x:range) 想要修改元素:for(auto &&x:range) 只读元素:for(const auto&amp; x:range) ...

Baron的博客 3408

有关for(auto x: vector<int>v)的问题

for(auto i: container)遍历容器元素 C ++ 11 的新特性,后者是可以遍历的容器/流,i可以获得容器中的每一个元素。 主要方式有三种 1.auto: 拷贝元素但不会修改原容器/流; 2.auto&amp;:拷贝并修改; 3.const auto&amp;:只读取容器中元素,不会拷贝,也不修改; 4.const auto:拷贝且不可修改拷贝出来的值; #include<iostream> #include<vector> using namesp

qq_57328462的博客 1000

C++类型推导auto与decltype使用技巧

在现代C++编程中,类型推导是提升代码简洁性和可维护性的重要工具。auto和decltype作为C++11引入的关键字,能够帮助开发者减少冗余的类型声明,同时增强代码的灵活性和表达力。本文将深入探讨auto和decltype的使用技巧,帮助读者掌握它们的核心应用场景,并避免常见陷阱。auto关键字能够根据初始化表达式自动推导变量类型,特别适用于复杂类型或模板代码中。C++类型推导:auto与decltype的实用技巧。自动类型推导auto的常见用法。

pkddwy_331的博客 199
上一篇: WebSocket协议简介
Add_a_cat
博客等级 码龄10年 5粉丝 44原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值