C++虚函数与抽象类:单元测验7-3核心考点与避坑指南
最近收到不少正在复习《C语言程序设计下》的同学来问单元测验7-3的事问得最多的就是“虚函数、抽象类这几个点到底要掌握到什么程度”。正好我在某高校代过这门课的习题课也整理过一套针对这个单元测验的复习思路今天就把里面的关键考点、典型错题和我在批改作业时看到的高频翻车点一次性聊透。这篇文章不是把课件复述一遍更像是我站在出题人的角度拆一拆这套测验背后真正想考察的能力。本文适合这几类人看正在准备单元测验7-3的在读学生、自学C想检验多态掌握程度的初学者以及需要带学生复习的助教或讲师。内容围绕虚函数的运行机制、抽象类的设计意图、析构函数为什么必须加virtual、还有那些“编译能过但行为不对”的隐蔽坑展开。通篇以测验7-3的实际考察风格为主线尽量用大白话把抽象概念讲清楚也会给出一眼就能落地的自查方法帮助你在考场上少丢冤枉分。1. 单元测验7-3到底在考什么多态与虚函数的完整知识骨架1.1 第七章为什么总被看作C课程的分水岭先说个背景。C课程一般分成两半前半部分讲基本语法、函数、数组、指针以及类和对象的基本封装后半部分才真正进入继承、多态、模板这些“重武器”。单元测验7-3刚好卡在第七章的位置这一章在多数教材里对应的是继承与多态的综合应用考察重点非常明确你有没有建立起“面向对象”的思维方式而不是只会写几个带class的C语言程序。我自己批改作业的体感是前六章学得再扎实的人到第七章也容易懵。原因是多态这个特性跟前面的语法不太一样它强调的不是“我写了什么”而是“程序运行时会发生什么”。你可以把继承理解成“父子关系的确立”把多态理解成“同一个动作在不同子类里呈现出不同行为”。没有多态你只能用基类指针调用基类自己的函数有了多态你才能让基类指针指向不同的派生类对象并在这个指针上调用出“属于那个派生类”的函数版本。测验7-3里的题目基本就是围绕这个能力展开的。1.2 测验7-3核心覆盖点与常见考察方式根据我对这套单元测验的了解7-3的知识点分布可以总结成五块虚函数的基本声明与调用规则、纯虚函数与抽象类、动态联编与静态联编、虚析构函数以及override与隐藏的辨析。为了让复习更有针对性我整理了一张考点地图对应到常见出题形式考点说明常见考察方式虚函数声明virtual关键字的位置、虚函数能否是静态成员函数选择题判断正误动态联编通过基类指针/引用调用虚函数时的实际行为阅读程序写输出纯虚函数 0的含义、抽象类不能实例化代码改错、选择抽象类有纯虚函数不能用对象、但可以用指针和引用判断能否实例化虚析构函数基类析构函数加virtual才能正确释放派生类资源程序行为判断覆盖vs隐藏函数签名是否一致、有无virtual综合辨析题这套测验里最有区分度的题目基本集中在“输出结果”和“能否通过编译”两类上。读程序写输出的题考察的是你对动态联编的理解判断能否通过编译的题考察的是你对虚函数规则的边界条件是否清楚。比如静态成员函数能不能是虚函数、抽象类能不能实例化——这种判断题看似简单但特别能拉开分差因为很多同学是“背过规则但没真正理解”。2. 高频错误1virtual关键字不是“性能优化”而是“运行时路由开关”2.1 初学者最常见的理解偏差我在助教答疑时最常听到的一句话是“老师我加了virtual程序怎么变慢了”这反映出很多同学把virtual理解成了类似inline的“优化手段”。实际上恰恰相反虚机制带来的是运行时的间接跳转成本。你需要的不是“快”而是“正确”。用生活场景打个比方。你去车站买车票如果直接买“今天下午3点去某城的票”这是静态确定好的但如果买的是“某趟车次”你到候车室才知道是哪辆车——这有点像虚函数。编译器在看到基类指针调用虚函数时并不确定这个指针到底指向哪个派生类对象所以它把这个决定推迟到运行时由对象自身的“类型信息”来决定跳转到哪个函数实现。这个机制的专业说法叫动态联编也叫运行时多态。我见过不少同学手写代码时把基类函数加virtual但派生类的同名函数没有加virtual。其实C里派生类重写基类虚函数时可以省略virtual关键字因为虚属性会“继承”下去。不过从代码可读性和防错的角度我还是建议在派生类里也写上或者直接在函数后面加override让编译器帮你检查签名是否匹配。这是测验7-3选择题和写程序题经常会考察的细节。2.2 动态联编与静态联编的对比静态联编发生在编译期函数调用在编译时就能找到固定地址动态联编发生在运行期通过虚函数表来确定最终调用目标。这里我不想把虚函数表的细节讲得太深但你需要知道它的存在每个含有虚函数的类在编译时会生成一张虚函数表表中记录了该类所有虚函数的地址每个对象内部会藏一个虚函数表指针指向自己所属类的虚函数表。当基类指针指向派生类对象时它拿到的那个虚函数表指针指向的是派生类的表所以虚函数调用会进入派生类的实现。对比项静态联编动态联编发生时间编译期运行期依据指针/引用的静态类型对象实际类型性能更快无间接跳转有一次间接寻址开销典型语法普通函数、非虚成员函数通过基类指针/引用调用虚函数一道非常经典的测验题定义了Animal基类和Dog派生类speak()在基类中是虚函数派生类重写后通过Animal* p new Dog(); p-speak();调用输出结果就是Dog的版本如果把virtual去掉结果就会变成基类的Animal版本。这里的关键不是“指针类型”而是“对象是谁”——动态联编认的是对象不是指针。写这类题的判断我建议先问自己一句调用这个函数时实际对象是基类还是派生类如果是派生类并且函数是虚函数那就是派生类版本。class Animal { public: virtual void speak() { std::cout Animal speaks std::endl; } }; class Dog : public Animal { public: void speak() { std::cout Dog barks std::endl; } }; int main() { Animal* ptr new Dog(); ptr-speak(); // 输出 Dog barks因为 speak 是虚函数 delete ptr; // 注意此处基类析构函数需要是虚析构函数 return 0; }它考察的就是“有没有virtual输出拐不拐弯”的区别。如果你把speak()的virtual去掉输出就会变成Animal speaks这也就是很多同学把输出题做错的原因——代码看起来一样但少了virtual行为天差地别。3. 高频错误2抽象类“不能实例化”不是缺陷而是设计约束3.1 纯虚函数与抽象类的语法细节纯虚函数的写法是在函数声明后面加 0比如virtual void draw() 0;。这里的 0并不是函数返回0而是一个语法标记告诉编译器“这个函数我在当前类里不提供实现你给我留个接口位让派生类来填”。含有纯虚函数的类就是抽象类它不能用来创建对象。很多同学看到“抽象类不能实例化”就直接死记硬背其实这个约束背后有很实际的原因。抽象类扮演的是“模板”或者“契约”的角色它定义了一组接口但具体的实现细节往往依赖于子类。假如你允许Shape s;这样创建一个抽象类对象那么s.draw()该执行什么抽象类自己都不知道。所以C干脆规定抽象类只能作为基类只能通过指针或引用去操作它的派生类对象。3.2 派生类实现纯虚函数的判定一个派生类如果继承了抽象类它必须把基类所有纯虚函数都实现出来否则这个派生类自己仍然是一个抽象类依旧不能实例化。这里容易出错的点集中在“部分实现”和“签名不匹配”上。比如基类有virtual void show(int) 0;派生类写的是void show(double)看起来像是实现了其实函数签名不同这属于隐藏而不属于覆盖基类纯虚函数仍然没有被实现派生类就仍然是抽象类。还有一种情况派生类实现了全部纯虚函数但基类也提供了某个纯虚函数的内联实现。C允许给纯虚函数写函数体但对象依然不能实例化派生类依然必须重写。这个点比较冷门但单元测验7-3的判断题偶尔会考属于“看书不仔细就丢分”的题目。我的建议是看到纯虚函数第一反应不要想“它有没有函数体”而要想“这个类还能不能创建对象”。3.3 抽象类也能写出能跑的代码虽然抽象类不能实例化但抽象类的指针和引用非常有用。最常见的写法是用抽象类指针指向派生类对象然后调用虚函数实现统一接口管理。比如有一个Shape抽象基类派生出Circle和Rectangle你定义一个Shape* shapes[2]数组分别指向两个派生类对象再遍历数组调用draw()就能得到各自不同的绘制结果。这其实是多态最核心的用法也是单元测验7-3后面编程题或综合题的雏形。class Shape { public: virtual void draw() 0; virtual ~Shape() {} }; class Circle : public Shape { public: void draw() override { std::cout Draw Circle std::endl; } }; class Rectangle : public Shape { public: void draw() override { std::cout Draw Rectangle std::endl; } };要学会从设计角度理解抽象类它存在的意义不是为了“让自己能用”而是为了“让所有子类长得像一家人”。在答题时凡是看到选项里出现“抽象类可以实例化”或者“纯虚函数可以有函数体”都要多留个心眼前者必错后者则要结合上下文判断。4. 最容易翻车的三道典型题从错误选项倒推考点4.1 典型题1构造函数里调用虚函数为什么“多态失效”了这是测验7-3里出错率最高的选择题之一。题目往往给出一个基类和派生类二者各有同名的虚函数然后在基类构造函数里调用这个虚函数问输出是什么。很多同学想当然地认为“既然是虚函数就应该调用派生类版本”结果答案是调用基类版本直接选错。原因在于对象的构造顺序。创建派生类对象时先执行基类构造函数再执行派生类构造函数。在基类构造函数执行期间派生类部分还没有被初始化对象在C看来还处于“基类构造中”的状态此时虚函数调用不会走动态联编而是直接调用当前正在构造的这个类里的版本。你可以这样记构造函数运行时对象还没有“完整成型”所以虚函数表指针指向的仍然是基类的虚函数表。等到派生类构造函数执行完对象才真正变成派生类对象。这种题考的不是你会不会写代码而是你有没有真正理解对象的生命周期。我建议在做这类题时别急着选答案先画一条对象构造时间线基类构造 → 派生类成员构造 → 派生类构造。凡是在“基类构造”这个时间点调用虚函数答案就是基类版本。4.2 典型题2基类析构函数要不要加virtual程序崩溃就在一念之间另一道高频题问的是析构函数。给定一个基类指针指向new出来的派生类对象然后delete这个指针问程序会调用哪些析构函数。如果基类析构函数没有virtualdelete时只会调用基类的析构函数而不会调用派生类的析构函数结果就是派生类自己申请的资源比如堆内存、文件句柄没有被释放造成内存泄漏。只有基类析构函数是虚函数时delete基类指针才会先调用派生类析构函数再自动调用基类析构函数跟构造顺序刚好相反。这个知识点我每次上课都会强调只要一个类打算作为基类使用并且通过基类指针操作派生类对象就一定要给析构函数加virtual。注意析构函数加virtual和普通虚函数有一点不同——它是唯一一个在“函数签名不同但依然构成覆盖”的特殊场景因为派生类和基类的析构函数名字不同但C仍把它们看作覆盖关系。测验7-3里如果考这个概念通常会给你四种组合基类加/不加virtual、派生类加/不加virtual然后问delete时的调用序列。记住真正决定能否完整析构的是基类析构函数有没有virtual。4.3 典型题3static成员函数不能是虚函数原因是它没有this还有一道判断正误题也很经典静态成员函数能否用virtual修饰答案是否定的。因为虚函数机制依赖于对象自身的类型信息调用虚函数时需要有this指针去找到虚函数表而静态成员函数不属于任何对象没有this指针自然也就没办法完成动态联编。你可以把静态成员函数理解成“类级别的普通函数”它跟对象没有绑定关系跟多态完全是两条路线。我把这个知识点整理成几个“铁律”做选择题时可以快速排除虚函数必须是成员函数不能是全局函数。虚函数不能是静态成员函数。构造函数不能是虚函数析构函数可以。内联函数可以是虚函数但虚函数的动态联编特性会让内联变得几乎没有意义。这几条几乎覆盖了测验7-3所有关于virtual修饰范围的判断题。做题时看到选项里有static、friend友元函数不是成员函数也不能是虚函数这类词直接判断“不能是虚函数”属于稳妥的拿分项。5. 编译能过但多态失效函数签名不同导致的隐藏才是大坑5.1 const成员函数与虚函数一个容易被忽略的签名差异比“加了virtual没效果”更隐蔽的坑是函数签名不同导致的隐藏。我见过不少同学写代码时自信满满地以为自己在“重写虚函数”运行结果却还是基类版本改了半天发现是少了const或者参数类型不匹配。举个例子class Base { public: virtual void print() const { std::cout Base const print std::endl; } }; class Derived : public Base { public: void print() { // 少了 const签名不同 std::cout Derived print std::endl; } }; int main() { Base* p new Derived(); p-print(); // 输出 Base const print return 0; }这段代码能编译通过但运行结果是基类的版本。因为Derived里的void print()和Base里的void print() const不是同一个签名前者没有覆盖后者而是把基类的print“隐藏”了。由于这个隐藏是通过基类指针看不见的所以动态联编根本不会发生。const是函数签名的一部分这种细节平时写作业不觉得一旦到单元测验7-3的选择题里就成了区分高手和普通人的题目。5.2 覆盖、隐藏、重载三者之间的边界为了让这类题目不再失分我总结了一张对比表覆盖override、隐藏redeclare/hide、重载overload三者的区别一目了然关键词是否同名是否在同一作用域函数签名要求virtual要求重载 overload是必须在同一作用域参数列表不同无所谓覆盖 override是不同类基类/派生类参数列表与const完全一致基类必须有virtual隐藏 hide是不同类基类/派生类不同于覆盖的任意情况基类有无virtual都可以做题时只要按三步走就能判断先看是否同名再看作用域是否跨类最后比对函数签名。如果不同类、同名、签名完全一致且基类函数是虚函数那就是覆盖会发生多态如果不同类、同名但签名不一致那就是隐藏不会发生多态。测验7-3的最后一道综合题往往就是给出一个继承层次里面既有重载、又有隐藏、还有覆盖让你写出各个调用的输出结果。这种题想要拿满分你必须先学会用表格里的条件去“定性”再逐行推导输出。我特别建议你在编译器里实际做一次这种实验注释掉粘的override故意在派生类少写一个const看看编译器会不会报错。实际上C11的override关键字非常有用它能强制让编译器检查“这个函数是否真的覆盖了基类的虚函数”如果签名不一致编译直接报错。很多同学担心写override会麻烦但恰恰是它能在考前帮你自动发现签名不匹配的问题。测验7-3里如果遇到代码补全或改错类大题手动检查签名一致性再加override验证基本不会丢分。6. 考前的自查清单与最后的冲刺建议6.1 两分钟快速判断题目的五个问题复习到这个阶段最重要的是形成条件反射式的判断逻辑。我在课上带学生讲过一套“五连问”自查法做任何一道多态相关的选择题时按顺序过一遍答案自然出来被调用的函数是不是成员函数不是 → 不考虑多态。这个函数在基类中是否声明为virtual不是 → 不会发生动态联编。调用时通过什么方式发起通过基类指针或基类引用 → 才可能动态联编通过对象直接调用 → 仍然是静态联编。派生类中的同名函数签名是否与基类完全一致包括参数类型、const限定符 → 一致才是覆盖。派生类对象是否已经构造完成如果当前还在基类构造函数中 → 虚调用仍走基类版本。这套方法对付单元测验7-3的选择题和改错题足够了。比如看到“通过基类对象s 派生类对象复制赋值然后调用虚函数”第一反应就是不产生多态因为对象切片后虚函数表指针指向的已经是基类虚函数表了。这种题很容易骗到只记住“指针/引用触发多态”的人。6.2 我一直推荐的复习与实战方法最后说说我自己的复习习惯也是我一直推荐给学生的。第一把每一章的核心概念浓缩成一句不超过20个字的话写在卡片上。比如“虚函数运行时路由开关”“抽象类只给接口不给实现”。这句话你得能讲给自己听讲不清楚就是没理解透。第二动手把书本上的小例子自己敲一遍然后把virtual删掉、给析构函数去掉virtual、把派生类函数加个const分别观察运行结果和编译报错。这样做的效果比背十道题都来得快因为你会亲眼看到行为差异。单元测验7-3这套题难并不是因为语法复杂而是因为它要求你同时理解编译器的静态视角和运行时的动态视角。对我来说带这门课最深的体会是真正把多态学明白的同学写出来的代码都有一个共同特征——不依赖记忆去堆规则而是能从对象的实际类型出发推演行为。你如果能做到这一点应对测验7-3会非常轻松更关键的是后面学模板、STL时也会顺畅很多。考试前把这篇文章里的代码和表格过一遍再动手运行两遍比闷头刷题有效得多。

相关新闻

Walsh码与m序列扩频机制:正交性边界与工程实现

Walsh码与m序列扩频机制:正交性边界与工程实现

简介:这份文档面向通信工程、无线通信课程学习者及CDMA系统入门研究者,系统梳理扩频序列中m序列与Walsh码的原理与实现。内容涵盖m序列的线性移位寄存器生成机制、周期特性与反馈系数影响,Walsh码基于Hadamard矩阵的正交构造、64阶序列在前向…

2026/10/17 0:16:47 阅读更多 →
MiniMax-Music3-nvfp4架构深度解剖(上):36层语言模型如何把一句描述变成语义音乐编码?

MiniMax-Music3-nvfp4架构深度解剖(上):36层语言模型如何把一句描述变成语义音乐编码?

【免费下载链接】MiniMax-Music3-nvfp4 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/MiniMax-Music3-nvfp4 点击查看 免费下载 MiniMax-Music3-nvfp4 是 MiniMax Music 3 大模型的 MLX NVFP4 社区量化版,面向 Apple Silicon 做"文…

2026/10/17 0:15:46 阅读更多 →
JasperReports 7.0.0迁移与实战:JRXML模板及数据源避坑指南

JasperReports 7.0.0迁移与实战:JRXML模板及数据源避坑指南

简介:JasperReports Library 7.0.0 是面向 Java 开发者和报表设计人员的完整项目源码压缩包,覆盖核心报表引擎、导出模块、示例模板与说明文档,适合需要学习新版 API、定制报表输出或排查 PDF/HTML 导出问题的中高级开发者。包内共 2000 个文…

2026/10/17 0:15:46 阅读更多 →

最新新闻

Kali Linux入门指南:虚拟机搭建与渗透测试工具实战

Kali Linux入门指南:虚拟机搭建与渗透测试工具实战

第一次打开 Kali Linux 之前,我以为这会是一个“装上就能扫描一切、破解一切”的神奇系统。真正用了一个月之后,我才意识到它更像一把多功能瑞士军刀——工具非常多,但每把都需要你自己去掌握使用时机和发力方式。这篇文章不是照着官方文档念…

2026/10/17 0:57:13 阅读更多 →
stdint.h与inttypes.h:C语言跨平台整数类型与PRI格式宏完全指南

stdint.h与inttypes.h:C语言跨平台整数类型与PRI格式宏完全指南

简介:这是一份面向 C/C 开发者的标准头文件资源,包含 inttypes.h 与 stdint.h 两个文件,用于解决老旧 MSVC 环境缺少 C99 标准整数类型定义而导致的编译报错。资源来自 msinttypes 项目,整体压缩包仅 7KB,共 3 个文件&…

2026/10/17 0:57:13 阅读更多 →
CTC7132交换芯片设计指南:端口映射、时钟同步与低时延验证

CTC7132交换芯片设计指南:端口映射、时钟同步与低时延验证

简介:这份资源是盛科网络CTC7132(TsingMa)云时代边缘接入路由交换芯片的官方产品手册,面向从事嵌入式硬件、单片机与网络设备开发的工程师,以及需要选型或设计企业网、城域以太网、XGPON/NGPON线卡与超融合设备的研发人…

2026/10/17 0:57:13 阅读更多 →
RayManPro全流程:气象数据如何转成PET热舒适指标

RayManPro全流程:气象数据如何转成PET热舒适指标

简介:RayManPro.zip 是一套基于 RayMan 模型的人体生理等效温度(PET)计算工具,面向城市气候、建筑环境与室外热舒适研究领域的科研人员、规划师及高校相关专业学生。通过输入云量、空气温度、相对湿度、风速等常规气象参数&#x…

2026/10/17 0:57:13 阅读更多 →
几何分布实战:算准“第几次成功”,优化重试与保底机制

几何分布实战:算准“第几次成功”,优化重试与保底机制

不是每一次等待都有结果,但几何分布能算准“第几次成功”做数据分析这些年,我越来越觉得,很多业务问题归根到底都在问三件事:还要试多少次才能成功?失败到第几个才算正常?这个“第一次成功”到底值不值得等…

2026/10/17 0:57:13 阅读更多 →
车辆路径问题(VRP)详解:约束模型、求解算法与实战应用

车辆路径问题(VRP)详解:约束模型、求解算法与实战应用

1. VRP到底在解决什么:从一个真实的配送场景说起先提个场景,你大概率遇到过:某社区团购平台每天有上百个订单要送到不同小区,每辆配送车的载重有限,司机的工作时长也有限,怎么安排路线才能让总行驶里程最短…

2026/10/17 0:56:12 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →