【Effective Modern C++】第二章 auto:6. 当auto推导的类型不符合要求时,使用显式类型初始化习惯用法

个人认为原著写的非常难懂,所以精简总结如下:

auto与代理类的问题:

当使用auto进行类型推导时,如果表达式返回的是代理类,auto会推导出代理类型而不是被代理的实际类型,可能导致未定义行为。

例如:

std::vector<bool> features(const Widget& w); bool highPriority = features(w)[5]; // 含义是w具有高优先级吗? processWidget(w, highPriority); // 按照w的优先级来处理

这段代码没有什么问题,但是如果把highPriority从显式类型改成auto

auto highPriority = features(w)[5]; // 危险!推导出std::vector<bool>::reference processWidget(w, highPriority); // 可能产生未定义行为!

原因:

  1. std::vector<bool>内部使用紧凑结构存储(每个bool占1位)
  2. 内存最小寻址单位是字节,单个 “位” 没有独立的内存地址;
  3. operator[]无法返回bool&(不能对单个位取引用),因此返回一个代理类std::vector<bool>::reference
  4. auto不会自动把代理类转换成bool,而是直接推导成std::vector<bool>::reference类型。

因此需要显式声明其为bool类型:

auto highPriority = static_cast<bool>(features(w)[5]); // 安全!

如何识别出代理类

头函数或函数签名会反映出其存在:

namespace std { template<class Allocator> class vector<bool, Allocator> { public: class reference { ... }; // 代理类! reference operator[](size_type n); ... }; }

非同寻常的返回值类型:如:std::vector<T>::operator[]通常返回T&,如果返回类型不是T&,可能是代理类。

常见的代理类场景:

  • std::vector<bool>的相关操作:位无独立地址,无法返回引用。
  • 表达式模板(用于优化数值计算):临时对象多,计算效率低。
  • 某些智能指针的实现:内存访问不安全/权限难控。
  • 延迟求值(lazy evaluation)系统:提前计算可能无效。

其他应用场景

1. 精度控制

double calcEpsilon(); auto ep = static_cast<float>(calcEpsilon()); // 明确表示精度降低

还可以应用于计算随机访问迭代器的容器中的某个元素下标。

2. 类型转换强调

double d = 0.7; size_t size = 100; auto index = static_cast<int>(d * size); // 明确表示浮点到整数的转换

3. 表达式模板的代理

Matrix m1, m2, m3, m4; auto sum = static_cast<Matrix>(m1 + m2 + m3 + m4); // 避免代理类型

总结

  • “隐形”的代理类型可以导致auto根据初始化表达式推导出“错误的”类型。
  • 带显式类型的初始化习惯用法强制auto推导出你想要的类型。

原著阅读地址

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

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

相关文章

智慧旅游虚拟仿真实训:场景化与交互式学习

随着旅游产业的数字化转型不断深入&#xff0c;行业对既掌握专业理论知识&#xff0c;又具备实践操作与应变能力的高素质人才需求日益迫切。在这一背景下&#xff0c;旅游管理虚拟仿真实训室应运而生&#xff0c;它作为连接传统课堂与真实行业场景的关键桥梁&#xff0c;正深刻…

【毕业设计】(源码+文档+远程调试,全bao定制等)基于python-cnn深度学习识别水果是否成熟

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

GBase 8c数据库磁盘故障定位解析

南大通用GBase 8c数据库常见的磁盘故障是磁盘空间不足、磁盘出现坏块、磁盘未挂载等。部分磁盘故障会导致文件系统损坏&#xff0c;例如磁盘未挂载&#xff0c;数据库管理自动定期执行磁盘检测时会识别故障并将实例停止&#xff0c;查看数据库状态时对应实例状态异常&#xff1…

5.AiServices工具类

目录 一.为什么要学习这个工具类&#xff1f; 二.使用步骤 1.引入依赖 2.声明接口 3.使用AiServices为接口创建代理对象 方式①&#xff1a;编写配置类 方式②&#xff1a;使用注解 4.在Controller中注入并使用 三.运行项目&#xff0c;测试效果 四.解释一下上面的Co…

莫凡电视的核心优势——聚焦全国地方台全量覆盖

各位影视与电视技术爱好者&#xff0c;今天分享莫凡电视的核心优势——聚焦全国地方台全量覆盖与直播流畅度&#xff0c;技术点扎实易懂&#xff0c;适配智能电视、机顶盒、投影仪等终端&#xff0c;大幅提升本地频道观影体验与实用性。 地方台接收核心搭载多协议解码引擎&…

谁需要迪士尼验厂与FAMA

需要知道谁做迪士尼验厂和谁需要FAMA&#xff0c;首先我们要来分清楚他们各自是什么&#xff1f; 迪士尼验厂&#xff08;Disney ILS Audit&#xff09;是迪士尼公司对其全球供应链中生产工厂进行的一种符合性审核&#xff0c;旨在确保供应商在社会责任、劳工权益、职业健康安全…

企业微信外部群主动推送消息全攻略

QiWe开放平台 个人名片 API驱动企微自动化&#xff0c;让开发更高效 核心能力&#xff1a;为开发者提供标准化接口、快速集成工具&#xff0c;助力产品高效拓展功能场景 官方站点&#xff1a;https://www.qiweapi.com 团队定位&#xff1a;专注企微API生态的技术服务团队 对接…

紫外荧光精准测硫,后处理系统开发利器:MEXA-1170SX硫黄分析装置项目实战全解

紫外荧光精准测硫&#xff0c;后处理系统开发利器&#xff1a;MEXA-1170SX硫黄分析装置项目实战全解在发动机后处理技术迭代与超低硫排放法规日益严苛的背景下&#xff0c;高灵敏度、多模式、实时在线的硫化合物分析已成为发动机研发、排放测试与润滑油消耗评估的核心环节。近期…

企业微信API:如何合规实现外部群主动消息推送?

​ ​ QiWe开放平台 个人名片 API驱动企微自动化&#xff0c;让开发更高效 核心能力&#xff1a;为开发者提供标准化接口、快速集成工具&#xff0c;助力产品高效拓展功能场景 官方站点&#xff1a;https://www.qiweapi.com 团队定位&#xff1a;专注企微API生…

odoo-094 self.env 主要属性和方法

文章目录主要属性主要方法代码位置在Odoo中&#xff0c; self.env是 Environment类的实例。主要属性 cr​ - 当前数据库游标 uid​ - 当前用户ID user​ - 当前用户记录 context​ - 当前上下文字典 company​ - 当前公司记录 companies​ - 用户可访问的公司记录集 lang​ - …

Vue3-14 watch监视对象及对象属性

文章目录监视 reactive监视对象属性监视数组监视 reactive reactive 的一个弊端&#xff1a; 不能整体修改数据 左边ref相当于替换了整个人&#xff1b; 右边reactive相当于人没换&#xff0c;只是换了属性。 监视reactive对象&#xff0c;默认是开启深度监视的&#xff0c;…

活字格低代码:破解企业数据孤岛难题,加速数字化转型进程

引言 在数字化转型的浪潮中&#xff0c;企业信息化建设面临的核心挑战已从“是否转型”转变为“如何高效推进”。然而&#xff0c;数据孤岛问题成为阻碍企业发展的普遍难题——系统割裂、数据无法互通、业务流程低效。传统解决方案如外包开发或Excel管理&#xff0c;往往成本高…

深度学习计算机毕设之卷神经网络基于python-cnn深度学习识别水果是否成熟

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

亲测好用!专科生毕业论文必备TOP8 AI论文工具

亲测好用&#xff01;专科生毕业论文必备TOP8 AI论文工具 2026年专科生毕业论文写作工具测评&#xff1a;为何需要这份榜单&#xff1f; 随着人工智能技术的不断发展&#xff0c;AI论文工具逐渐成为高校学生&#xff0c;尤其是专科生撰写毕业论文的重要辅助工具。然而&#xff…

AI风险模型揭秘:“香港巴菲特”谢清海1/4资产投入黄金的量化验证——硬资产如何重构财富安全边界

摘要&#xff1a;本文通过分析“香港巴菲特”谢清海将25%身家投入黄金的投资决策&#xff0c;结合地缘政治风险量化模型、货币贬值预测算法及工业需求动态追踪系统&#xff0c;剖析黄金作为“终极保险”在资产配置中的核心价值。面对全球经济的非线性波动&#xff0c;被称为“香…

黄金价格2026:世界黄金协会多因子模型揭示四大核心驱动力的贝叶斯预测

摘要&#xff1a;本文通过世界黄金协会的黄金收益归因模型与多因子分析框架&#xff0c;结合宏观变量动态预测算法&#xff0c;解析2025年驱动黄金价格的核心因子&#xff0c;并运用蒙特卡洛模拟与贝叶斯网络模型&#xff0c;量化评估2026年四大关键变量对金价波动的影响路径与…

分享|大数据挖掘建模平台教学方向及科研方向

大数据挖掘建模平台是面向大数据相关专业课程教学与实训的工具。平台无需编程&#xff0c;通过拖拽的方式进行操作&#xff0c;以流程化的方式将数据源、统计分析、数据清洗、数据处理等环节进行连接&#xff0c;快速熟悉分类、回归、聚类、时序、关联规则等领域的算法&#xf…

初中水平的安徽农民:张祥前统一场论从哲学公设到技术应用的完整体系

张祥前统一场论&#xff1a;从哲学公设到技术应用的完整体系 摘要 本文基于"算法联盟"对张祥前统一场论的系统深度破解与分析&#xff0c;完整呈现了该理论的核心内容、逻辑架构与技术应用。统一场论以"时空同一化"和"物理量几何化"为两大核心公…

astmd4169振动测试

对于astmd4169标准中的振动测试&#xff0c;最关键的一步是根据你的实际运输方式来确定对应的测试谱和测试时间。标准也提供了多种预设的运输场景方案。astmd4169部分运输振动谱卡车运输谱常见测试时间1小时空运谱常见测试时间2小时铁路运输谱测试时间标准根据流通周期DC确定松…

TV电视影视大全:流畅观影背后的核心技术解析

各位影视与电视技术爱好者&#xff0c;今天分享TV电视影视大全的核心优势——聚焦画质优化与多端适配&#xff0c;技术点扎实易懂&#xff0c;适配智能电视、机顶盒、投影仪等终端&#xff0c;大幅提升全场景观影体验与实用性。 画质呈现上搭载双编码适配方案&#xff0c;主力…