跟我学C++中级篇—空类标签
一、空类在C中有一种特殊的类就是空类。所谓空类就是啥都没有。前面分析过空类作为基类的优势也分析过迭代器标签中空类的应用。说明空类这个东西还是很有价值的。正如数学中的零它的存在有着重要的作用。同样在C中空类在一些场景下也起了关键的作用。二、空类标签通过迭代器的标签可以进一步理解空类标签。它其实是作为类型标签来参与重载、模板特化及特定语义的处理一种机制。一般是指空的struct或class类型。即它本身未包含任何信息和数据只是一种类型的表现。如下structA_tag{};class B_tag{};它一般作为一种标签为分机制在编译阶段应用较为广泛。因为它是空的所以不会产生运行时的开销。如果对STL的源码有过较多分析可以发现在STL的源码中有很多的地方用到了这种机制。三、作用空类标签在C中的各个应用场景有着不同的作用主要有编译期分发处理可以在编译期进行类型的区分也可以作为萃取的基础实现空类型的判断重载函数的处理可以通过空类标签作为重载的区别从而支持各种自定义的重载实现零运行时成本这就与其本身的定义相关没有内容就意味着运行时的开销也没有模板特化空类标签可以通过模板参数让编译器为特定场景下的数据类型创建提供支持语义表达可以通过空标签名称的定义等机制实现正确的语义传递防止出现错误的理解标记和占位符这个就更好理解了不表达语义只为达到某种目的而占用一个空位或者通过空类标签来实现类似ID标识其主要的应用场景包括tag dispatchID标识的典型应用模板重载重载函数的应用策略选择这个类似于编译期的场景划分类型分类就是标记或萃取STL迭代器分类典型的编译期的类型处理表达构造语义如std::nullopt_t、std::in_place_t等大家如果有兴趣可以找一找其它的空类应用的场景对比分析一下。四、例程下面看一个空标签类的例程#includeiostream#includeiterator#includelist#includevectortemplatetypename ItvoiditImpl(Itit,intn,std::random_access_iterator_tag){std::coutcall random access iteratorstd::endl;itn;}templatetypename ItvoiditImpl(Itit,intn,std::bidirectional_iterator_tag){std::coutcall bidirectional iteratorstd::endl;while(n--0){it;}}templatetypename ItvoidcustomFunc(Itit,intn){//获取标签类型using Categorytypename std::iterator_traitsIt::iterator_category;//根据标签类型进行重载itImpl(it,n,Category{});}intmain(){std::vectorintv{10,22,18,36,59};std::listintl{1,10,20,66,100};autovItv.begin();autolItl.begin();customFunc(vIt,2);customFunc(lIt,2);std::coutvector cur:*vItstd::endl;std::coutlist cur:*lItstd::endl;return0;}五、总结大家可能都看过《射雕英雄传》里面一种拳叫做“空明拳”。当时觉得看到招式什么“空碗盛饭、空屋住人”觉得好笑。其实抽象来看这才是“空”的意味。空才能生物空才能状态变化。计算机中也是如此空是非空的对应是对象的一种有效标签。

相关新闻

TMS320VC5510 Bootloader深度解析:启动模式、Boot Table构建与调试实战

TMS320VC5510 Bootloader深度解析:启动模式、Boot Table构建与调试实战

1. 项目概述与Bootloader核心价值在嵌入式系统开发,尤其是数字信号处理器(DSP)应用领域,系统上电后的“第一行代码”如何执行,是决定整个产品稳定性和启动效率的关键。TMS320VC5510作为一款经典的定点DSP,其…

2026/10/18 10:09:08 阅读更多 →
基础知识之 结构体内存对齐,联合体,枚举,大小端

基础知识之 结构体内存对齐,联合体,枚举,大小端

文章目录结构体内存对齐联合体枚举大小端结构体 结构体是一个类型,每个结构体都独一无二 内存对齐 内存对齐增加CPU读取的效率,一次性读完整的数据,避免多次访问,用空间换时间 因为CPU不是按字节读取内存的,是按照字…

2026/10/18 10:10:06 阅读更多 →
用强Agent构建评测Harness,小白也能轻松玩转大模型评测(收藏版)

用强Agent构建评测Harness,小白也能轻松玩转大模型评测(收藏版)

本文介绍如何利用Claude Code搭建评测Harness,对业务Agent进行系统性评测。传统评测方式存在启动成本高、人力密集、迭代慢等问题,而Harness式评测通过将评测逻辑编码为Agent提示词,实现了快速迭代和零部署。文章详细阐述了Harness的整体架构…

2026/10/18 10:10:09 阅读更多 →

最新新闻

FTP主动/被动模式全解析:原理、配置与数据连接故障排查

FTP主动/被动模式全解析:原理、配置与数据连接故障排查

你在某台Linux服务器上搭好了FTP服务,把账号密码发给同事,结果对方用FileZilla连上来,登录倒是正常,目录列表却一直转圈圈,最后弹出一句“无法打开数据连接”。这样的问题我排查过太多次,几乎所有初次接触F…

2026/10/18 17:46:45 阅读更多 →
React Native 鸿蒙跨平台:从零实现一个推箱子小游戏的完整指南

React Native 鸿蒙跨平台:从零实现一个推箱子小游戏的完整指南

1. 立项逻辑:为什么一个小游戏也要走 React Native 鸿蒙跨平台先说这个项目的来由。当时手头接到一个需求:做一个跑在鸿蒙设备上的推箱子小游戏,但同一份玩法逻辑后面还得复用到安卓和 iOS。很多人会觉得,推箱子就是个几百行逻辑的…

2026/10/18 17:46:45 阅读更多 →
西北干旱区矢量边界.SHP:空间分析的地基与治理基底

西北干旱区矢量边界.SHP:空间分析的地基与治理基底

简介:本资源为西北干旱区高精度矢量边界数据,面向地理信息、生态遥感、气候研究及国土规划领域的科研人员与高校师生,解决区域尺度空间分析中缺乏权威、可用干旱区行政/自然边界底图的问题。数据以标准Shapefile格式提供,共8个文件…

2026/10/18 17:46:45 阅读更多 →
Ubuntu源码编译MinkowskiEngine避坑指南:CUDA/PyTorch/GCC/cuDNN四版本锁死

Ubuntu源码编译MinkowskiEngine避坑指南:CUDA/PyTorch/GCC/cuDNN四版本锁死

简介:本资源是面向深度学习开发者与Ubuntu系统用户的MinkowskiEngine源码级安装实践指南,聚焦解决稀疏张量计算库在CUDA环境下的兼容性编译难题。资源包共3个文件(1个HTML文档、1个.inscode配置文件、1个.gitignore),总…

2026/10/18 17:46:45 阅读更多 →
大模型真实负载如何驱动国产算力芯片设计升级

大模型真实负载如何驱动国产算力芯片设计升级

简介:本资源是一份聚焦AI算力产业趋势的深度行业分析PPT,面向芯片工程师、AI基础设施从业者、信创领域决策者及高校相关专业研究者,系统解答大模型演进如何驱动算力重心从训练向推理迁移、国产AI芯片如何突破封锁实现全栈适配等核心问题。文件…

2026/10/18 17:46:45 阅读更多 →
2B参数视觉语言模型Youtu-Parsing:复杂文档解析新范式,替代传统OCR管道

2B参数视觉语言模型Youtu-Parsing:复杂文档解析新范式,替代传统OCR管道

文档解析这个赛道,这几年肉眼可见地热闹起来了。前几年大家还在用“OCR文字识别手工规则”硬啃版面,现在直接上视觉语言模型(VLM)来做端到端的文档解析,效果确实是一代一代在进步。最近我拿到了一套名为Youtu-Parsing的…

2026/10/18 17:45:45 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →