多重继承派生类构造函数详解:初始化列表与构造顺序一次搞懂
刷到PTA 6-5这道题时我先是一愣——“多重继承派生类构造函数”分值10分放在C第5章类继承的练习里看起来平平无奇。但真正动手去补全那段代码才发现知识点串得特别密基类带参构造函数怎么传参、初始化列表的书写有多讲究、对象构造顺序到底由谁决定。正好我最近在帮几个学C的朋友看作业发现这道题几乎成了一个“劝退点”。如果你也在刷这类补代码题或者刚学到多重继承、构造函数这一块这篇文章就把这道题背后的原理、我的实现思路、还有调试中踩过的坑一次性讲清楚。不管你是刚接触继承的小白还是想快速过一遍考点准备机试内容都值得你花几分钟看一看。1. 题目背后多重继承构造函数到底在考什么1.1 先还原一道典型的PTA 6-5题目模型虽然不同学校的PTA题库里6-5可能不完全一样但这类“多重继承派生类构造函数”的题目几乎都长一个样题目会给出一段已经写好的main函数以及两个基类的定义基类里通常没有默认构造函数只提供带参数的构造函数。要求你补全一个派生类的构造函数让main函数里的各种创建对象方式都能通过编译并产生预期输出。为了不偏离实际我用下面这个等效模型来说明大家网刷到的6-5大概率核心考点相同#include iostream using namespace std; // 基类BaseA只有带参构造函数 class BaseA { public: BaseA(int a) { cout BaseA a endl; } }; // 基类BaseB只有带参构造函数 class BaseB { public: BaseB(int b) { cout BaseB b endl; } }; // 要求补充派生类Derived继承BaseA和BaseB构造函数用两个参数分别初始化基类 class Derived : public BaseA, public BaseB { public: // TODO: 在这里补充构造函数 }; int main() { Derived d(10, 20); return 0; }注意由于题目原文本未提供上述是我根据常见题型做的等效还原实际题目里可能需要派生类同时从三个基类继承或者还要初始化成员对象但原理完全相同。这里出现了一个关键问题BaseA和BaseB都没有默认构造函数。按照C规则派生类的构造函数如果没有显式调用基类构造函数编译器会隐式地尝试调用基类的默认构造函数。现在基类里根本没有默认构造函数所以编译必然失败。这就是这道题的第一道关卡。1.2 为什么初始化列表是唯一的正解很多初学者会尝试在构造函数体内赋值比如Derived(int a, int b) { // 难道不能在这里“构造”基类吗 }构造函数体里其实已经没什么可操作的了。因为对象在进入构造函数体之前所有的基类和成员对象都已经构造完成。也就是说基类BaseA和BaseB的构造函数在这个函数体执行前就已经被调用过了。如果你想在函数体里对基类的某个数据成员赋值那操作的是已经构造好的对象而不是初始化过程。对于带参构造且没有默认构造函数的基类你唯一的控制机会就是“构造函数初始化列表”。初始化列表是写在构造函数参数列表之后、函数体之前的一段以冒号开头的列表。例如Derived(int a, int b) : BaseA(a), BaseB(b) {}这一行代码的含义是在构造Derived对象时用参数a初始化BaseA部分用参数b初始化BaseB部分。这样编译就通过了。这个规则背后的逻辑并不难理解。对象是由各个子对象“拼装”出来的派生类对象内部包含一个基类子对象多重继承下就有多个基类子对象。比如Derived的对象就是一个包含了BaseA子对象和BaseB子对象的完整对象。基类子对象必须先于派生类自身的数据构造出来否则派生类构造时用到的基类数据就没有着落。初始化列表就是“下单指令”让编译器知道应该用哪个构造函数来构造这些子对象。所以遇到基类缺省默认构造时初始化列表是唯一的正解这不是风格喜好问题而是语法规则。2. 从PTA 6-5看核心实现手写一个能过的构造函数2.1 基础版代码两个基类两个参数现在直接给出最朴素的完整实现并补上输出验证代码。按题目的等效模型在TODO处填上构造函数class Derived : public BaseA, public BaseB { public: Derived(int a, int b) : BaseA(a), BaseB(b) {} };完整跑起来#include iostream using namespace std; class BaseA { public: BaseA(int a) { cout BaseA a endl; } }; class BaseB { public: BaseB(int b) { cout BaseB b endl; } }; class Derived : public BaseA, public BaseB { public: Derived(int a, int b) : BaseA(a), BaseB(b) {} }; int main() { Derived d(10, 20); return 0; }编译并运行控制台输出BaseA 10 BaseB 20请注意这个输出顺序永远是先输出BaseA再输出BaseB。可能你已经想到了这个顺序与继承声明class Derived : public BaseA, public BaseB中基类的出现顺序一致。那如果我们把初始化列表写成: BaseB(b), BaseA(a)呢输出会变成什么样实际上输出仍然不变还是BaseA先、BaseB后。初始化列表的书写顺序并不会改变基类构造的执行顺序真正决定顺序的是继承声明顺序。这一点必须刻进脑子里它也是编译器和面试官都很爱挖的坑。2.2 基类有多个参数怎么办PTA的10分题通常不会只满足于单参数构造。我把题目升级一下假设BaseA有构造函数BaseA(int x, int y)BaseB有构造函数BaseB(const string s)派生类构造函数就需要接收对应的一组参数并逐一转发#include string class BaseA { public: BaseA(int x, int y) { cout BaseA x , y endl; } }; class BaseB { public: BaseB(const string s) { cout BaseB s endl; } }; class Derived : public BaseA, public BaseB { public: Derived(int a, int b, const string t) : BaseA(a, b), BaseB(t) {} };这里需要注意的一点是初始化列表里写的是对基类构造函数的调用不是在定义局部变量。也就是说BaseA(a, b)不是创建新的BaseA对象而是指定当前Derived对象内部的BaseA子对象用哪些参数构造。一开始容易产生混淆多写几次就习惯了。2.3 成员对象也要通过初始化列表来“下单”比多重继承更常见的是“组合继承”同时出现。派生类里如果还有成员对象那么初始化列表里既要初始化基类也要初始化成员对象。执行顺序依然是先按继承声明顺序构造基类再按成员声明顺序构造成员对象最后执行构造函数体。看一个综合例子class Member { public: Member(int v) { cout Member v endl; } }; class Derived : public BaseA, public BaseB { private: Member m; public: Derived(int a, int b, int v) : BaseA(a), BaseB(b), m(v) {} };运行后输出顺序是BaseA ... BaseB ... Member ...也就是说基类永远比成员对象先构造。哪怕你把m(v)写在初始化列表的第一位BaseA(a)写最后实际执行时还是先构造基类。因为C规定基类子对象的构造先于成员子对象。这个顺序是编译器的硬性规定写代码的人无法改变。所以组织初始化列表时最清晰、最不容易出错的写法就是完全按照“基类声明顺序 - 成员声明顺序”来写。2.4 虚继承下的额外规则最派生类负责虚基类如果题目再进一步涉及到菱形继承D继承B和CB和C都虚继承A情况会再复杂一点。这时A的带参构造函数只能由最终派生类D的初始化列表来调用而B、C构造函数里对A的调用会被忽略。例如class A { public: A(int x) { cout A x endl; } }; class B : virtual public A { public: B(int x, int y) : A(x) { cout B endl; } }; class C : virtual public A { public: C(int x, int z) : A(x) { cout C endl; } }; class D : public B, public C { public: D(int x, int y, int z) : A(x), B(x, y), C(x, z) {} };这里D的初始化列表里必须写A(x)否则编译报错。而B、C里那两句A(x)会被编译器忽略因为虚基类只能由最派生类构造。虽然PTA的基础题多半不涉及虚继承但搞懂这个规则能让你在遇到更难题目时心里有底。虚继承的构造顺序还要注意虚基类最先构造然后按继承声明顺序构造普通基类再成员最后构造体。2.5 构造函数重载与默认参数的写法如果题目给出多个创建方式比如既允许Derived d1;又允许Derived d2(1,2);那你要考虑构造函数重载。最直白的是写两个构造函数class Derived : public BaseA, public BaseB { public: Derived() : BaseA(0), BaseB(0) {} Derived(int a, int b) : BaseA(a), BaseB(b) {} };如果基类构造函数有默认实参也可以把两个合并成一个带默认参数的构造函数Derived(int a 0, int b 0) : BaseA(a), BaseB(b) {}但这里有两个坑一是如果基类的默认构造函数和你带默认实参的构造参数能匹配同一个调用可能产生二义性二是如果你同时写了Derived()和Derived(int a0, int b0)编译器会报重定义错误。因此选择哪种写法取决于题目已有的main函数到底怎么调用。PTA判题只关心能不能通过编译、输出是否正确不需要过度设计。3. 踩坑实录初始化列表顺序与默认构造的坑3.1 坑一漏写基类构造函数直接编译失败当年第一次刷这题我偷懒写了一个空构造函数结果编译器甩给我一条错误error: no matching function for call to BaseA::BaseA()问题很清楚派生类Derived默认构造时需要调用BaseA的默认构造函数可BaseA压根没有默认构造函数。类似地如果你写了Derived(int a, int b) {} // 没有初始化列表同样会报错因为编译器自动找BaseA()和BaseB()找不到。解决办法就是不要偷懒把基类构造函数显式写上Derived(int a, int b) : BaseA(a), BaseB(b) {}这里还有一个细节如果你定义了一个带参数的构造函数最好同时也考虑默认构造。如果题目要求Derived d1;也要能编译而派生类中的基类都带默认构造你可以提供一个默认构造函数比如Derived() : BaseA(0), BaseB(0) {}。或者用带默认实参的形式Derived(int a0, int b0) : BaseA(a), BaseB(b) {}这样既能无参构造又能带参构造。但是注意如果你已经写了无参的Derived()又写带默认实参的构造函数会发生重载冲突编译器会直接报错。这个细节在写PTA题目时经常被忽略。3.2 坑二成员变量初始化的顺序陷阱多重继承题目本身不难但一旦在派生类里加入成员对象坑就来了。看这段经典反例class Derived { public: Derived(int x) : b(x), a(b) {} // 以为a先用b初始化 private: int a; int b; };实际上成员a和b的初始化顺序由它们在类中的声明顺序决定也就是先初始化a再初始化b。所以a(b)执行时b还没有被初始化于是a拿到的是一个未确定的垃圾值。这个坑特别阴险编译可能不报错但运行结果“飘忽不定”。放在多重继承场景里同样如此。如果你的类有多个基类子对象和多个成员对象初始化列表的书写顺序到底是啥我们很容易按自己直觉写但编译器只认“声明顺序”。我在刚刚测试时故意这么写Derived(int a,int b,int v) : m(v), BaseB(b), BaseA(a) {}实际执行顺序并没有按我写的m - BaseB - BaseA而是按继承声明顺序先BaseA、再BaseB最后成员m。也就是说编译器把我写的初始化列表重新排序了。所以与其靠记忆不如直接遵守一条铁律初始化列表的书写顺序永远和类的继承声明顺序、成员声明顺序保持一致。这样读代码的人能一眼看出执行顺序也避免将来有人按书写顺序误判。3.3 坑三析构顺序与构造顺序刚好相反这道题有时会连析构函数一起考。虽然PTA很少要求补析构但理解析构顺序有助于你调试。析构顺序是构造顺序的完全逆序先执行派生类自己的析构函数体再按成员声明的反顺序析构成员对象再按继承声明顺序的反顺序析构基类子对象。为什么要这样因为构造时依赖关系是“基类-成员-派生类”析构时要“先拆后盖”防止派生类特殊资源被提前清理后基类析构时还需要使用它们。我在本地跑如下代码~BaseA() { cout ~BaseA\n; } ~BaseB() { cout ~BaseB\n; } ~Derived() { cout ~Derived\n; }输出是~Derived ~BaseB ~BaseA如果题目要求输出析构顺序记住“后构造的先析构”这一原则就够了。4. 排查技巧PTA判题遇到编译错误和答案错误怎么查4.1 编译错误信息速查表PTA判题时编译错误是最常见的第一道坎。我把这题常遇的错误信息和排查方向整理成了一张表供你直接对照错误信息可能原因解决办法no matching function for call to BaseA::BaseA()基类没有默认构造函数但你未显式调用带参构造在初始化列表中添加BaseA(...)no matching function for call to Derived::Derived()基类或成员对象也没有默认构造函数导致派生类默认构造不可用显式定义所有需要的构造函数或给参数加默认值use of deleted function Derived::Derived()基类或成员的某个构造函数被定义为delete或存在冲突检查基类构造函数的访问权限、是否被显式deleteredefinition of Derived::Derived(int, int)构造函数重载冲突比如无参构造和带默认实参的构造同时存在删除其中一个或去掉默认实参BaseA : cannot instantiate abstract class基类包含未实现的纯虚函数在派生类中实现所有纯虚函数warning: field m is initialized after base初始化列表顺序与声明顺序不一致重新调整初始化列表顺序这个“field is initialized after”警告其实非常有用。编译器虽然允许你乱序写初始化列表但会给出警告。如果你刷题时顺手开了-Wall这些警告能帮你提前发现问题。PTA在线判题不一定显示警告但本地编译器会建议所有代码尽量0警告提交。4.2 输出顺序与预期不符时怎么定位题目如果要求构造函数里打印信息而你提交后答案错误十有八九是输出顺序不对。此时先从以下三点排查第一检查继承声明顺序。输出顺序为基类的构造顺序与初始化列表书写顺序无关。如果希望先输出BaseB再输出BaseA唯一的方法是调换继承声明顺序把class Derived : public BaseA, public BaseB改成class Derived : public BaseB, public BaseA。注意这会改变基类子对象的内存布局也可能影响向上转换时的指针调整但通常不影响这题。第二检查是否用了虚继承。如果某个基类是virtual继承无论它在继承声明列表中的位置如何虚基类总是最先被构造。在菱形继承里这个优先级比普通基类高。第三检查成员对象。成员对象的构造一定在所有非虚基类之后。如果题目同时包含成员对象输出顺序应为虚基类如果有- 普通基类按声明顺序- 成员对象按声明顺序- 派生类构造函数体。经验谈我调试这种顺序问题时习惯在每个构造函数入口打印一条日志并用缩进表示当前层级。比如BaseA(int a) { cout [BaseA] a endl; }这样能直观看到对象创建时的完整调用链。识别顺序比肉眼强得多。4.3 模拟PTA判题环境的本地自测方法PTA的题目一般只要求你补全类定义但本地调试时最好把main函数和基类补全组成一个可运行的完整程序。建议做法是先复制题目给出的基类定义和main函数再把你的派生类填进去最后用如下几个隐式用例测试只调用无参构造Derived d0;如果题目支持调用带参构造Derived d(1, 2);连续构造多个对象检查输出顺序是否稳定用值传递、指针、引用访问派生类对象确认没有奇怪的拷贝构造要求如果本地运行得到稳定且逻辑正确的输出再提交PTA基本就能一次过。注意提交时不要带上你自己写的main函数因为PTA的题目已经隐藏了main额外main会导致链接错误。5. 从10分题进阶看懂构造机制多重继承不再可怕5.1 用“盖楼”理解对象构造的层次关系为什么构造函数要定这么多规则我自己的理解是对象的构造过程像盖一座楼地基是基类子对象多重继承就是多块地基墙体结构是成员对象装修是构造函数体。地基必须先打而且每块地基根据位置有顺序墙体在地基之上装修永远最后。C语法把这些顺序固化下来就是为了保证任何对象在进入构造函数体时它依赖的所有部分都已经处于可用状态。如果你把基类构造调用放在初始化列表里就相当于施工前指定“这块地基要打成什么参数规格”。如果漏写编译器只能默认“打一块默认规格的地基”可图纸上根本没有默认规格于是施工队罢工编译错误。这个类比虽然不完全精确但足以帮新手记住“初始化列表是唯一的正式下单通道”。5.2 多重继承在现实项目里怎么用才不踩雷在刷完这道10分题后不少同学会为了“炫技”到处用多重继承可现实是多重继承在工程里是受管控的“特种工具”。最安全的用法是“接口式继承”即基类只含纯虚函数不包含成员数据这样派生类可以同时实现多个“能力接口”而不会引入复杂的子对象构造问题。现代C里这种模式常被用来模拟其他语言里的接口。虚拟继承解决的是菱形继承中重复基类子对象的问题但它会让构造函数规则更复杂。如果不是非用不可我会优先建议把共享数据抽出来放到组合对象里而不是用虚继承硬搓。毕竟能设计出不需要多重继承的方案通常可读性更好。5.3 复盘刷完这道题后我养成的三个习惯回顾这道PTA 6-5它虽然只有10分却让我改掉了三个懒毛病。第一个习惯写派生类前先列清单。先把继承的所有基类、所有成员对象按声明顺序写在纸上或注释里然后照着这个顺序写初始化列表。这让每次书写都稳定、可预测。第二个习惯不再依赖编译器隐式调用基类构造函数。只要基类存在带参构造函数哪怕同时有默认构造函数我也会把基类初始化显式写进列表里防止以后基类删掉默认构造函数时波及到我的代码。这是个低成本高回报的防御性写法。第三个习惯开满编译器警告。初始化列表顺序不一致、未初始化成员、基类构造函数调用遗漏这些都能靠-Wall -Wextra提前暴露。在本地把警告当错误处理到OJ上就顺多了。这道题适合作为C第5章学完后的自测题。如果能不看答案秒写正确说明对类继承、构造顺序、初始化列表的理解已经过关如果还卡壳建议把上面的三种坑重新过一遍再找类似题目多刷几组。我个人刷完这道题后最大的体会是多重继承的可怕其实不在于继承本身而在于“看不见的顺序”。一旦你抓住了构造顺序这条主线那些看起来复杂的规则都能推导出来。以后再遇到更复杂的类层次设计也能从构造机制出发做出更稳妥的取舍。

相关新闻

802.11 RF链路解析:从信道规划到无线排障实战

802.11 RF链路解析:从信道规划到无线排障实战

在无线网络这一行待久了,你会发现一个有趣的现象:很多人在排障时,习惯先去看后台配置、漫游策略、信道计划,甚至一度怀疑是 DHCP 服务器出了问题。但真到了现场,拿着终端站在天线底下,信号显示“满格”&…

2026/10/17 16:02:25 阅读更多 →
深入Nginx ngx_event_init_conf:events配置校验与启动失败排障

深入Nginx ngx_event_init_conf:events配置校验与启动失败排障

删掉 events 块的那天,我盯着 nginx: [emerg] no "events" section in configuration 这条日志愣了几秒。配置精简过头,以为 events 只是可选的性能调优段,结果 reload 直接失败。顺着报错去源码里定位,最后停在一…

2026/10/17 16:02:33 阅读更多 →
REA逆向工程开源项目实战:二进制分析与流程自动化

REA逆向工程开源项目实战:二进制分析与流程自动化

1. 这个项目到底在折腾什么 第一次看到“REA 逆向工程”这个说法,很多人会愣一下:REA 是什么?是某个缩写、某个协议,还是某个内部代号?其实在逆向圈子里,REA 通常指的是一类 二进制可执行文件的分析与还原…

2026/10/17 16:02:44 阅读更多 →

最新新闻

Nmap NSE脚本实战:从端口扫描到网络审计的进阶指南

Nmap NSE脚本实战:从端口扫描到网络审计的进阶指南

1. 为什么我劝你别只把Nmap当端口扫描器用 很多人第一次接触Nmap,都是从一条 nmap 192.168.1.1 开始的。扫出一堆开放端口,看到22、80、443,然后呢?然后就没有然后了。如果你也停在这一步,那说实话,你只用…

2026/10/17 16:02:21 阅读更多 →
PHP整站源码带数据库部署指南:从环境配置到Docker容器化

PHP整站源码带数据库部署指南:从环境配置到Docker容器化

简介:这是一套基于PHPMySQL开发的六合类网站完整源码,采用phpMyAdmin管理数据库,系统划分为后台管理、代理与会员三大模块,适合有一定PHP基础、希望研究整站架构与数据库设计的开发者用于技术学习与二次开发参考。压缩包共1086个文…

2026/10/17 16:02:21 阅读更多 →
OpenCV特征区域分析:几何、矩、形状与纹理特征值计算与稳定性实战

OpenCV特征区域分析:几何、矩、形状与纹理特征值计算与稳定性实战

1. 从"能跑通"到"测得准":特征区域特征值到底在算什么很多人第一次接触特征区域分析,都是被一个很朴素的需求推着走的:图里有一块我关心的区域,我想知道它到底"长什么样"。这个"长什么样"…

2026/10/17 16:02:21 阅读更多 →
高级前端面试官视角:从状态管理到工程化的出题逻辑与刷题策略

高级前端面试官视角:从状态管理到工程化的出题逻辑与刷题策略

我断断续续做过一段时间前端面试官,部门里让我整理一套高级前端开发工程师的面试题,用来筛人和给内部晋升做参考。那段时间我一边出题一边复盘,最直观的感受是:很多候选人简历写得很漂亮,基础题也能答得不错&#xff0…

2026/10/17 16:02:21 阅读更多 →
不卖的天价胸罩:用锚定效应打造品牌营销核武器

不卖的天价胸罩:用锚定效应打造品牌营销核武器

如果你在一个公开场合,看到一件标价上千万美元的内衣被锁在防弹玻璃柜里,由专人看护、媒体围着拍,你会不会下意识地问一句:这东西到底卖给谁? 我第一次关注到维多利亚的秘密那件“Fantasy Bra”时,就是带着…

2026/10/17 16:02:21 阅读更多 →
STM32寄存器编程实战:GPIO、定时器与串口

STM32寄存器编程实战:GPIO、定时器与串口

每次看到论坛里有人说“寄存器难”,我都想拉住他聊五分钟。我入行那几年也被寄存器折磨过,直到有一次调一个功耗敏感的项目,手里的库函数版本和例程对不上,底层配置出来的引脚电平就是不对。从那以后我翻烂了参考手册,…

2026/10/17 16:01:21 阅读更多 →

日新闻

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/17 1:44:59 阅读更多 →
影刀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 阅读更多 →