auto推导类型原则

auto 是 C++11 引入的类型自动推导关键字,它允许编译器根据表达式的类型来推导变量的确切类型。虽然使用 auto 可以让代码更简洁,但理解它的类型推导规则非常关键,尤其是在涉及指针、引用、const、模板等场景时。


✅ 一、基本推导原则

auto x = expression;

编译器根据 expression值类型 推导出 x精确类型(类似函数模板参数推导)。


🔸二、常见推导规则总结表

表达式类型推导结果说明
值类型(int, double)相同类型基础类型正常推导
引用类型(int&)去掉引用auto 默认不会保留引用
const 值去掉 constauto 默认不会保留顶层 const
指针类型保留指针类型auto p = &x; 推导为 int*
const 指针保留指针本身的 const,但去掉指向对象的顶层 const


🔹三、关键例子:值/引用/const

1. 默认去引用、去顶层 const

 

int a = 10; const int b = 20; auto x = a; // int auto y = b; // int (const 被去掉)

2. 显式保留引用(用 auto&

int a = 10; auto& x = a; // int&,引用保留 const auto& y = a; // const int&,也保留 const


🔹四、数组与函数类型推导

1. 数组会退化为指针

int arr[3] = {1, 2, 3}; auto x = arr; // int*,数组退化成指针 auto& y = arr; // int(&)[3],引用才保留数组类型

2. 函数也会退化为函数指针

void func(int) {} auto x = func; // void(*)(int) auto& y = func; // void(&)(int)


🔹五、auto vs decltype(auto)

关键字推导方式
auto类似模板参数推导(去引用、const)
decltype(auto)完全等价于表达式的类型(保留引用、const)

int a = 42; int& ra = a; auto x = ra; // int(去掉引用) decltype(auto) y = ra; // int&(保留引用)


🔹六、auto 与范围 for 循环

1. 正确使用 auto& 防止拷贝:

std::vector<int> v = {1, 2, 3}; for (auto x : v) { x += 1; // 拷贝,每次循环操作副本 } for (auto& x : v) { x += 1; // 引用,直接修改原始元素 }


🔹七、配合 const 使用

  • auto 不保留顶层 const,需要显式加上:

const auto x = expr; // x 是 const const auto& y = expr; // const 引用


✅ 八、小结:auto 推导的三个关键“默认行为”

特性是否保留说明
引用❌(默认不保留)auto 默认推导为值类型
顶层 const❌(默认不保留)推导为非 const
指针 / 函数 / 数组✅(但有退化)数组退化为指针,函数退化为函数指针

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/904768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用智能表格做FMEDA

一、优点 使用智能表格替代excel做FMEDA具备以下优势&#xff1a; 减少维护成本&#xff08;数据库关联&#xff0c;修改方便&#xff09;便于持续优化&#xff08;失效率分布&#xff0c;失效率模型可重复使用&#xff09;多人同步编写&#xff08;同时操作&#xff0c;同步…

IP协议.

IP 协议是互联网的核心协议&#xff0c;工作在网络层。它给网络中的设备分配唯一的 IP 地址&#xff0c;把上层数据封装成数据包&#xff0c;然后根据目的 IP 地址通过路由器等设备进行转发&#xff0c;实现数据在不同网络间的传输。它还能在必要时对数据包进行分片和重组&…

archlinux 详解系统层面

Arch Linux 深度解析&#xff1a;从设计哲学到系统架构 一、Arch Linux 概述&#xff1a;滚动发行的极客之选 Arch Linux 是一款以 滚动更新&#xff08;Rolling Release&#xff09; 为核心特性的 Linux 发行版&#xff0c;强调 轻量、灵活、高度可定制&#xff0c;旨在让用…

HTML8:媒体元素

视频和音频 视频元素 video 音频 audio <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>媒体元素学习</title> </head> <body> <!--音频和视频 src:资源路径 controls:控制条…

SpringBoot3集成Oauth2——1(/oauth2/token方法的升级踩坑)

备注&#xff1a;本文适用于你在SpringBoot2.7以前集成过oauth2&#xff0c;并且项目已经正式投入使用的情况&#xff0c;否则&#xff0c;我建议你直接学习或者找资料学习最新的oauth2集成&#xff0c;就不要纠结于老版本的oauth2。 原因&#xff1a;Spring Security 5.x和Sp…

笔记本电脑实现网线内网 + Wi-Fi外网同时使用的配置方案

1、同时连接两个网络‌ 插入网线连接内网&#xff0c;确保内网IP地址正常获取&#xff08;如10.143.88.x&#xff09;&#xff1b;连接Wi-Fi接入外网&#xff0c;确认可正常访问互联网&#xff08;如网关为192.168.8.1&#xff09;。 2、 记录关键网络参数‌ 内网网关&#…

从韦斯利・卡普洛看北斗星咨询公司的技术咨询引领之路

在科技与商业深度交融的时代&#xff0c;技术咨询公司扮演着举足轻重的角色&#xff0c;它们宛如连接技术创新与企业实际需求的桥梁&#xff0c;助力企业在复杂多变的市场环境中找准技术发展方向&#xff0c;实现可持续增长。《对话 CTO&#xff0c;驾驭高科技浪潮》的第 5 章聚…

首版次软件测试的内容有哪些?首版次软件质量影响因素是什么?

首版次软件测试不仅是简单的“找错”&#xff0c;更是系统地验证和评估软件各项功能和性能指标是否符合设计标准。 一、首版次软件测试常见的测试内容   1.功能测试&#xff1a;对照需求文档&#xff0c;确认功能模块是否按预期实现&#xff0c;用户操作流程是否顺畅。   …

从零开始的python学习(六)P86+P87+P88

本文章记录观看B站python教程学习笔记和实践感悟&#xff0c;视频链接&#xff1a;【花了2万多买的Python教程全套&#xff0c;现在分享给大家&#xff0c;入门到精通(Python全栈开发教程)】 https://www.bilibili.com/video/BV1wD4y1o7AS/?p6&share_sourcecopy_web&v…

从设计到开发,原型标注图全流程标准化

一、原型标注图是什么&#xff1f; 原型标注图&#xff08;Annotated Prototype&#xff09;是设计原型&#xff08;Prototype&#xff09;的详细说明书&#xff0c;通过图文结合的方式&#xff0c;将设计稿中的视觉样式、交互逻辑、适配规则等技术细节转化为开发可理解的标准…

飞云分仓操盘副图指标操作技术图文分解

如上图&#xff0c;副图指标-飞云分仓操盘指标&#xff0c;指标三条线蓝色“首峰线”&#xff0c;红色“引力1”&#xff0c;青色“引力2”&#xff0c;多头行情时“首峰线”和“引力1”之间显示为红色&#xff0c;“引力1”和“引力2”多头是区间颜色显示为紫色。 如上图图标信…

【LUT技术专题】ECLUT代码解读

目录 原文概要 1. 训练 2. 转表 3. 测试 本文是对ECLUT技术的代码解读&#xff0c;原文解读请看ECLUT。 原文概要 ECLUT通过EC模块增大网络感受野&#xff0c;提升超分效果&#xff0c;实现SRLUT的改进&#xff0c;主要是2个创新点&#xff1a; 提出了一个扩展卷积&…

动态规划之背包问题:组合优化中的经典NP挑战

背包问题概念&#xff1a; 背包问题是一种经典的组合优化的NP问题&#xff0c;在计算机科学、运筹学等领域有着广泛的应用。 问题可以简单的描述为&#xff1a; 假设有一个容量为C的背包和n个物品&#xff0c;每个物品i都有重量w[i]和价值v[i]。目标是选择一些物品放入背包&…

vue3: pdf.js5.2.133 using typescript

npm install pdfjs-dist5.2.133 项目结构&#xff1a; <!--* creater: geovindu* since: 2025-05-09 21:56:20* LastAuthor: geovindu* lastTime: 2025-05-09 22:12:17* 文件相对于项目的路径: \jsstudy\vuepdfpreview\comonents\pdfjs.vue* message: geovindu* IDE: vscod…

H2Database SQL 插入流程

H2Database SQL 插入流程 插入数据时会先进行 SQL 解析,然后找到插入表对应的 Primary Index 对应的 BTree,然后根据二分法定位到插入的叶子节点,将 key(主键) 和 value(Row) 插入到指定的叶子节点. 解析 SQL session 加锁 创建 savepoint获取or创建事务 设置 savepoint 执行…

虚拟机ubantu20.04系统桥接模式下无法ping通外网,但可以ping通本机的解决方案

1.出现的问题&#xff1a; 虚拟机ubantu20.04系统桥接模式下无法ping通外网,但可以ping通本机。 2.解决方案&#xff1a; 如果 DHCP 未分配 IP 地址&#xff0c;可以手动配置静态 IP&#xff1a; 1.编辑网络配置文件&#xff1a; sudo nano /etc/netplan/01-netcfg.yaml 修…

面对渠道竞争,品牌该如何应对?

无论是传统零售渠道还是电商平台的&#xff0c;渠道竞争仍旧是品牌维持和扩大影响力绕不开的一环。品牌想要保证自身的市场地位和盈利能力&#xff0c;就需要充分发挥各方面的优势&#xff0c;来应对多变的市场环境。 一、改变产品定位 在存量市场上&#xff0c;消费者本身拥有…

SpringAI特性

一、SpringAI 顾问&#xff08;Advisors&#xff09; Spring AI 使用 Advisors机制来增强 AI 的能力&#xff0c;可以理解为一系列可插拔的拦截器&#xff0c;在调用 AI 前和调用 AI 后可以执行一些额外的操作&#xff0c;比如&#xff1a; 前置增强&#xff1a;调用 AI 前改…

101alpha_第6个

第6个alpha (-1 * correlation(open, volume, 10)) 这个就是看这两个相似性。10天之内的 如果结果为正且数值较大&#xff0c;投资者可能会认为在开盘价上涨时成交量萎缩&#xff0c;市场上涨动力不足&#xff0c;可能是卖出信号&#xff1b;反之&#xff0c;开盘价下跌时成交…

【渗透测试】Web服务程序解析漏洞原理、利用方式、防范措施

文章目录 Web服务程序解析漏洞原理、利用方式、防范措施一、原理**1. 定义与触发条件****2. 攻击链流程图** 二、利用方式**1. 常见漏洞类型与利用手法**(1) IIS 5.x-6.x解析漏洞(2) Apache解析漏洞(3) Nginx解析漏洞(4) IIS 7.x解析漏洞(5) PHP CGI解析漏洞&#xff08;CVE-20…