news 2026/5/4 6:33:31

C++笔记-模板进阶和继承(上)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++笔记-模板进阶和继承(上)

1C++的第一个程序

一.模板进阶

1.1非模板类型参数

那之前学过的stack举例,在这之前我们如果要用N,就要用宏来定义,但是宏毕竟有局限性:

如果我要用到两个stack,一个要求10个空间,另一个要求100空间呢?

这时候有人可能会说把N定义为100不就行了。

确实,这样能解决当前的问题,但是会不会造成浪费?第一个stack是不是就浪费了90个空间。

所以为了解决这种问题,就引入了非模板类型参数:

这样就可以完美解决这个问题,需要多少空间我就开多少空间,就避免了浪费的问题。

当然,也是可以给缺省值的。

那么哪里会用到这种用法呢?

在C++11中引入的容器array就需要用到这种方式,那么这个容器是干什么的呢?

这东西和我们平常用的静态数组差不多,底层也是一个数组。

就连两个数组的大小也是一样的,基本没什么区别。

但是array是不允许你对数组进行修改,包括我们之前学的头部,尾部和中间的插入和删除,只能访问其中的数据,并且array并不会对数组中的数据进行初始化:

通过调试可以看出数组中的数据对视随机值。

这个容器呢用的不多,原因相信大家都知道:我有更好用的vector为什么不用呢?

那么array具体和我们日常用的静态数字有什么区别呢?

体现在越界的读和写方面:

在上面的代码中,很明显我们越界访问了,但是静态数组的越界读是不检查的,所以程序并不会报错。

而静态数组的写是抽查,可能越界几个会检查出来,后面就不一定检查出来。

而array的读和写都会检查,一旦出现越界访问,就会因为断言而报错。

最后目前非模板类型参数一般只支持整型,最新的编译器会支持double等类型,像自定义类型都是不支持的。

1.2特化

1.2.1概念

通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能胡得到一些错误的结果,需要特殊处理,比如:是西安一个串门用来比较的函数模板:

1.2.2函数模板特化

那我们之前写过的Date类举例,此时我们传过去来比较两个日期的大小事没有问题的。

此时结果就出现错误,因为我们是用地址进行比较的,用地址去比较不是我们想要的,那么此时就需要用到特化:

这就是特化的基本应用,下面是特化的基本格式:

1.必须先有一个基础的函数模板

2.关键字template后面接一对空的尖括号<>

3.函数名后跟一对尖括号,尖括号中指定需要特化的类型4.函数形参表:必须要和模板函数的基础参数类型完全相同,如果不同编译器可能会报一些奇怪的错误

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 6:31:29

AI辅助开发架构框架:从问题类别到系统退役的严谨工程实践

1. 项目概述&#xff1a;一个为AI辅助开发而生的架构框架如果你是一位技术架构师、产品设计师&#xff0c;或者是一位需要管理AI辅助开发项目的技术负责人&#xff0c;你大概率遇到过这样的困境&#xff1a;让AI写代码&#xff0c;它确实能给你一个能跑起来的原型&#xff0c;但…

作者头像 李华
网站建设 2026/5/4 6:30:31

OpenSubject视频数据集自动化筛选技术与工程实践

1. 项目背景与核心价值在计算机视觉与多媒体分析领域&#xff0c;高质量视频数据集是算法研发和模型训练的基础设施。OpenSubject作为面向开放场景的人物行为分析数据集&#xff0c;其构建过程中面临两个关键挑战&#xff1a;原始视频素材的质量参差不齐&#xff0c;以及标注成…

作者头像 李华
网站建设 2026/5/4 6:26:57

从0搭建Electron硬件架构:一个被系统性问题反复击穿的开发者复盘

匍匐前进的三年 一名前端页面仔&#xff0c;用三年时间独自趟过 Electron、TCP 长连接、实时语音、蓝牙硬件和崩溃治理的深水区。这篇文章不是成功的经验&#xff0c;而是一个普通开发者匍匐前进的完整地图。引言 这是一款硬件配套类桌面端 IM 应用&#xff0c;对标主流即时通讯…

作者头像 李华
网站建设 2026/5/4 6:23:34

Betaflight Configurator:无人机飞控配置的终极解决方案

Betaflight Configurator&#xff1a;无人机飞控配置的终极解决方案 【免费下载链接】betaflight-configurator Cross platform configuration and management application for the Betaflight firmware 项目地址: https://gitcode.com/gh_mirrors/be/betaflight-configurato…

作者头像 李华
网站建设 2026/5/4 6:22:52

Claude IDE工具集:让AI编程助手从代码生成到自主执行

1. 项目概述&#xff1a;一个为Claude设计的IDE工具集最近在折腾AI编程助手时&#xff0c;发现了一个挺有意思的项目——YousifAshwal/claude-ide-tools。这本质上是一个专门为Anthropic的Claude模型&#xff08;特别是Claude 3系列&#xff09;打造的集成开发环境工具集。简单…

作者头像 李华
网站建设 2026/5/4 6:21:41

OVI技术:实现音视频同步生成的双骨干网络架构

1. 技术背景与核心价值在多媒体内容创作领域&#xff0c;音视频同步生成一直是个技术难点。传统方案通常采用音频驱动视频或视频驱动音频的单向生成模式&#xff0c;存在信息损失大、同步效果差的痛点。OVI技术通过双骨干网络架构实现跨模态特征深度融合&#xff0c;让机器能像…

作者头像 李华