当前位置: 首页 > article >正文

类和对象(上 中 下)

类 图纸 / 模板对象 根据图纸造出来的东西1.类的定义类就是把属性和行为封装在一起的模板。1.1 类定义格式^ class 为定义类的关键字 Stack 为类的名字{} 中为类的主体注意类定义结束时后面分号不能省略。类体中内容称为类的成员类中的变量称为类的属性或成员变量类中的函数称为类的方法或者成员函数。^ 为了区分成员变量一般习惯成员变量加一个特殊标识如在成员变量前面或者后面加_或者 m 开头。^ C中 struct 也可以定义类C 兼容C中 struct 的用法同时 struct 升级成了类明显的变化是 struct 中可以定义函数一般情况下还是推荐使用 class 定义类。^ 定义在类面的成员函数默认为 inline。1.2 访问限定符^ C 一种实现封装的方式用类将对象的属性与方法结合在一起让对象更加完善通过访问权限选择性的将其接口提供给外部的用户使用。^ public 修饰的成员在类外可以直接被访问protected 和 private 修饰的成员在类外不能直接被访问。^ 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止如果后面没有访问限定符作用域就到 } 即类结束。^ class 定义成员没有被访问限定符修饰时默认为 private ,struct 默认为 public.^ 一般成员变量都会被限制为 private / protected ,需要给别人使用的成员函数则放为 public.1.3 类域^ 类定义了一个新的作用域类的所有成员都在类的作用域中在类体外定义成员时需要使用 作用域操作符指明成员属于哪个类域。^ 类域影响的是编译的插找规则。#includeiostream using namespace std; class Stack { public: // 成员函数 void Init(int n 4); private: // 成员变量 int* array; size_t capacity; size_t top; }; // 声明和定义分离需要指定类域 // 声明只说有 定义真正造出来 void Stack::Init(int n) { array (int*)malloc(sizeof(int) * n); if (nullptr array) { perror(malloc申请空间失败); return; } capacity n; top 0; } int main() { Stack st; st.Init(); return 0; }2. 实例化2.1 实例化概念^ 用类类型在物理内存中创建对象的过程称为类实例化出对象。^ 类是对象进行一种抽象描述是一个模型一样的东西限定了类有哪些成员变量这些成员变量只是声明没有分配空间用类实例化出对象时才会分配空间。^ 一个类可以实例化出多个对象实例化出的对象占用实际的物理空间存储类成员变量。打个比方类实例化出对象就像现实中使用建筑设计图建造出的房子类就像是设计图设计图规划了有多少个房间房间大小功能等但是并没有实体的建筑存在也不能住人用设计图修建出房子房子才能住人。同样类就像实际图一样不能存储数据实例化出的对象分配物理内存存储数据。#includeiostream using namespace std; class Date { public: void Init(int year, int month, int day) { _year year; _month month; _day day; } void print() { cout _year / _month / _day endlendl; } private: // 这里只是声明并没有开空间 int _year; int _month; int _day; }; int main() { // Date类实例化出对象 d1 和 d2 Date d1; Date d2; d1.Init(2026, 3, 9); d1.print(); d2.Init(2026, 4, 11); d2.print(); return 0; }2.2 对象大小内存对齐规则^ 第一个成员在与结构体偏移量为 0 的地址处^ 其他成员变量要对齐到某个数字对齐数的整数倍的地址处^ 注意对齐数 编译器默认的一个对齐数与该成员大小的较小值^ VS 默认的对齐数为 8^ 结构体总大小为最大对齐数所有变量类型最大者与默认对齐参数取最小的整数倍^ 如果嵌套了结构体的情况嵌套的结构体对齐到自己的最大对齐数的整数倍处结构体的整体大小就是所有最大对齐数含嵌套结构体的对齐数的整数倍#includeiostream using namespace std; class A { }; int main() { A a; cout sizeof(a) endl; return 0; }上面的程序运行后我们发现成员变量的 C 类对象的大小是 1这里给 1 个字节纯粹是为了占位标识对象存在。3. this 指针^ this 指针是一个指向当前对象自己的指针或引用。当成员变量和局部变量 / 参数重名时用 this 区分谁是对象自己的。^ 编译器编译后类的成员函数默认都会在形参第一个位置增加一个当前类类型的指针叫做 this 指针。比如 Date 类的 Init 的真实原型为void Init ( Data* const this, int year , int month , int day ).^ 类的成员函数中访问成员变量本质都是通过 this 指针访问^ C 规定不能在实参和形参的位置显示的写 this 指针但是可以在函数体内显示使用 this 指针。4. 类的默认成员函数默认成员函数就是用户没有显示实现编译器会自动生成的成员函数称为默认成员函数。6 个默认成员函数初始化和清理 构造函数主要完成初始化工作析构函数主要完成清理工作拷贝复制 拷贝构造是使用同类对象初始化创建对象赋值重载主要是把一个对象赋值给另一个对象取地址重载获取变量 / 对象的内存地址对一个对象直接用 会返回对象在内存中 的真实起始地址。5. 构造函数构造函数是特殊的成员函数需要注意的是构造函数虽然名称叫构造但是构造函数的主要任务并不是开空间创建对象而是对象实例化时初始化对象。构造函数的特点^ 函数名与类名相同^ 无返回值返回值啥都不需要给也不需要写 void)^ 对象实例化时系统会自动调用对应的构造函数^ 构造函数可以重载^ 如果类中没有显示定义构造函数则 C 编译器会自动生成一个无参的默认构造函数一旦用户显示定义编译器将不再生成^ 无参构造函数全缺省构造函数我们不写构造时编译器默认生成的构造函数都叫做默认构造函数。但是这三个函数有且只有一个存在不能同时存在。无参构造函数和全缺省构造函数虽然构成函数重载但是调用时会存在歧义^ 我们不写编译器默认生成的构造对内置类型成员变量的初始化没有要求也就是说是否初始化时不确定的看编译器。对于自定义类型成员变量要求调用这个成员变量的默认构造函数初始化C 把类型分成内置类型基本类型int / char / double / 指针和自定义类型class / struct 等关键字^ 实现构造函数时初始化成员变量主要使用函数体内赋值构造函数初始化还有一种方法就是初始化列表初始化列表的使用方式是以一个冒号开始接着是一个以逗号分隔的数据成员列表每个成员变量后面跟一个放在括号中的初始值或表达式。^ 每个成员变量在初始化列表中只能出现一次语法理解上初始化列表可以认为是每个成员变量定义初始化的地方。^ 引用成员变量const 成员变量没有默认构造的类类型变量必须放在初始化列表位置进行初始化否则会编译报错。^ C11 支持成员变量声明的位置给缺省值这个缺省值主要是给没有显示在初始化列表初始化的成员使用。^ 尽量使用初始化列表初始化因为那些你不在初始化列表初始化的成员也会走初始化列表如果这个成员在声明位置给了缺省值初始化列表会用这个缺省值初始化。如果没有给缺省值对于没有显示在初始化列表初始化的内置类型成员是否初始化取决于编译器。对于没有显示在初始化列表初始化的自定义类型成员会调用这个成员类型的默认构造函数如果没有默认构造会编译错误^ 初始化列表中按照成员变量在类中声明顺序进行初始化跟成员在初始化列表出现的先后顺序无关。建议声明顺序和初始化列表顺序保持一致。6. 析构函数析构函数与构造函数功能相反析构函数不是完成对对象本身的销毁比如局部对象是存在栈帧的函数结束栈帧销毁也就释放了C 规定对象在销毁时会自动调用析构函数完成对象中资源的清理释放工作。析构函数的特点^ 析构函数名是在类名前加上字符 ~。^ 无参数无返回值也不需要加 void)。^ 一个类只能有一个析构函数若未显示定义系统会自动生成默认的析构函数。^ 对象生命周期结束时系统会自动调用析构函数。^ 跟析构函数类似我们不写编译器自动生成的析构函数对内置类型成员不做处理自定类型成员会调用它的析构函数。^ 如果类中没有申请资源是析构函数可以不写直接使用编译器生成的默认析构函数但是有资源申请时一定要自己写析构否则会造成资源泄露。^ 一个局部域的多个对象C 规定后定义的先析构。7. 拷贝构造函数如果一个构造函数的第一个参数是自身类类型的引用且任何额外的参数都有默认值则此构造函数也叫做拷贝构造函数也就是说拷贝构造是一个特殊的构造函数。拷贝构造函数的特点^ 拷贝构造函数是构造函数的一个重载。^ 拷贝构造函数的第一个参数必须是类类型对象的引用使用传值方式编译器直接报错因为语法逻辑上会引发无穷递归调用。拷贝构造函数也可以多个参数但是第一个参数必须是类类型对象的引用后面的参数必须有缺省值。^ C 规定自定义类型对象进行拷贝行为必须调用拷贝构造所以这里自定义类型传值传参和传值返回值都会调用拷贝构造完成。^ 若未显示定义构造编译器会自动生成拷贝构造函数。自动生成的拷贝构造对内置类型成员变量会完成值拷贝 / 浅拷贝对自定义类型成员变量会调用它的拷贝构造^ 如果一个类显示实现了析构并释放资源那么它就需要显示写拷贝构造否则就不需要。^ 传值返回会产生一个临时对象调用拷贝构造传值引用返回返回的是返回对象的别名没有产生拷贝。但是如果返回一个对象是一个当前函数局部域的局部对象函数结束就销毁了那么使用返回是有问题的这是的引用相当于一个野引用类似一个野指针一样。传引用返回可以减少拷贝但是一定要确保返回对象在当前函数结束后还在才能引用返回。8. 赋值运算符重载8.1 运算符重载^ 当运算符被用于类类型的对象是C 允许我们通过运算符重载的形式指定新的定义。C 规定类类型对象使用运算符时必须转换成调用对应运算符重载若没有对应的运算符重载则会编译报错。^ 运算符重载是具有特殊名字的函数它的名字是由 operator 和后面要定义的运算符共同构成。和其他函数一样它也具有其返会类型和参数列表以及函数体。^ 重载运算符函数的参数个数和该运算符作用的运算对象数量一些多。一元运算符有一个参数二元运算符有两个参数二元运算符的左侧运算对象传给第一个参数右侧运算对象传给第二个参数。^ 如果一个重载运算符函数是成员函数则它的第一个运算对象默认传给隐式的 this 指针因此运算符重载作为成员函数时参数比运算对象少一个。^ 运算符重载以后其优先级和结核性与对于的内置类型运算符保持一致。^ ( .* :: sizeof ?: . ) 以上 5 个运算符不能重载。^ 重载操作符至少有一个类类型参数不能通过运算符重载改变内置类型对象的 含义如 int operator (int x, int y)^ 重载 运算符时有前置 和后置 运算符重载函数名都是 operator.无法很好的区分。C 规定后置 重载时增加一个 int 形参跟前置 构成函数重载。8.2 赋值运算符重载赋值运算符重载是一个默认成员函数用于完成两个已经存在的对象直接的拷贝赋值这里要注意跟拷贝构造区分拷贝构造用于一个对象拷贝初始化给另一个要创建的对象。赋值运算符重载的特点^ 赋值运算符重载是一个运算符重载规定必须重载为成员函数。赋值运算重载的参数建议写成 const 当前类类型引用否则会传值会有拷贝。^ 有返回值且建议写成当前类类似引用引用返回可以提高效率有返回值目的是为了支持连续赋值场景。^ 没有显示实现时编译器会自动生成一个默认赋值运算符重载默认赋值运算符重载行为跟默认拷贝构造函数类似对内置类型成员变量会完成值拷贝 / 浅拷贝对自定义类型成员变量会调用它的赋值重载函数。^ 如果一个类显示实现了析构并释放资源那么他就需要显示写赋值运算符重载否则就不需要。9. 取地址运算符重载9.1 const 成员函数^ 将 const 修饰的成员函数称为 const 成员函数 cosnt 修饰成员函数放大成员函数参数列表的后面。^ cosnt 实际修饰该成员函数隐含的 this 指针表面在该成员函数中不能对类的任何成员进行修改。#includeiostream using namespace std; class Date { public: Date(int year 1, int month 1, int day 1) { _year year; _month month; _day day; } void print()const { cout _year - _month - _day endl; } private: int _year; int _month; int _day; }; int main() { // 这里非 const 对象也可以调用 cosnt 成员函数是一种权限的缩小 Date d1(2025, 3, 12); d1.print(); const Date d2(2025, 4, 12); d2.print(); return 0; }10. static 成员^ 用 static 修饰的成员变量称之为静态成员变量静态成员变量定要在类外面初始化。^ 静态成员变量为所有类对象所共享不属于某个具体的对象不存在对象中存放在静态区。^ 用 static 修饰的成员函数称之为静态成员函数静态成员函数没有 this 指针。^ 静态成员函数中可以访问其他的静态成员但是不能访问非静态的因为没有 this 指针。^ 非静态的成员函数可以访问任意的静态成员变量和静态成员函数^ 突破类域就可以访问静态成员可以通过 类名静态成员 或者 对象. 静态成员 来访问静态成员变量和静态成员函数^ 静态成员也是类的成员受 public , protected , private 访问限定符的限制。^ 静态成员变量不能在声明位置给缺省值初始化因为缺省值是个构造函数初始化列表的静态成员变量不属于某个对象不走构造函数初始化列表11. 友元^ 友元提供了一种突破列访问限定符封装的方式友元分为友元函数和友元类在函数声明或者类声明的前面加 friend 并且比啊友元声明放到一个类的里面。^ 外部友元函数可访问类的私有和报复成员友元函数仅仅是一种声明它不是类的成员函数。^ 友元函可以在类定义的任何地方声明不受类访问限定符限制。^ 一个函数可以是多个类的友元函数。^ 友元类中的成员函数都可以是另一个类的友元函数都可以访问另一个类中的私有和保护成员。^ 友元类的关系是单向的不具有交换性比如A类是B类的友元但是B类不是A类的友元。^ 友元类关系不能传递如果A是B的友元B是C的友元但A不是C的友元。^ 有时提供了便利但是友元会增加耦合度破坏了封装所以友元不宜多用。12. 内部类^ 如果一个类定义在另一个类的内部这个内部类就叫做内部类。内部类是一个独立的类跟定义在全局相比它只是受外部类类域限制和访问限定符限制所以外部类定义的对象不包含内部类。^ 内部类默认是外部类的友元类。^ 内部类本质也是一种封装当A类跟B 类紧密关联A类实现出来主要就是给B类使用那么可以考虑把A类设计为B的内部类如果放到 private / protected 位置那么A类就是B类的专属内布列其他地方都用不了。13. 匿名对象^ 用类型实参定义出来的对象叫做匿名对象相比之前我们定义的类型对象名实参定义出来了的叫有名对象。^ 匿名对象生命周期只在当前一行一般临时定义一个对象当前用一下即可就可以定义匿名对象。

相关文章:

类和对象(上 中 下)

类 图纸 / 模板对象 根据图纸造出来的东西1.类的定义类就是把属性和行为封装在一起的模板。1.1 类定义格式^ class 为定义类的关键字, Stack 为类的名字,{} 中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员&#x…...

清华大学车辆学院团队推出大模型微调领域的新型强化学习算法——STAPO

清华大学车辆学院团队推出大模型微调领域的新型强化学习算法 近日,清华大学车辆学院李克强院士、李升波教授课题组与滴滴自动驾驶部门联合提出了用于大模型微调训练的 STAPO(Spurious-Token-Aware Policy Optimization)算法,旨在解…...

洛谷:P1424 小鱼的航程(改进版)

题目描述有一只小鱼,它平日每天游泳 250 公里,周末休息(实行双休日),假设从周 x 开始算起,过了 n 天以后,小鱼一共累计游泳了多少公里呢?输入格式输入两个正整数 x,n,表示从周 x 算起…...

往期精彩|EBioMedicine:MRI脑年龄异质性、认知、遗传学与阿尔茨海默病神经病理学之间的关系

摘要总结:该研究基于大样本、多中心、多模态神经影像数据,深入探讨了认知正常老年人群中脑龄异质性与阿尔茨海默病(AD)神经病理、认知表现及遗传背景之间的复杂关系。研究通过构建结构和功能MRI脑龄预测模型,将个体划分…...

ARM指令流水线的分类与比较(ARM处理器指令系统——指令流水线,中篇)

本文声明:内容来源于网络,进行整合/再创作;部分内容由AI辅助生成。ARM微处理器主要包含3级指令流水线、5级指令流水线、7级指令流水线、8级指令流水线和13级指令流水线这5个流水线。本节着重讲述3级、5级指令流水线。3级指令流水线到ARM7为止…...

Jellyfin在Android上的实战指南:打造你的开源家庭媒体中心

1. 为什么选择Jellyfin?从零开始认识你的开源媒体管家 如果你和我一样,家里攒了一堆电影、电视剧、音乐和家庭照片,分散在电脑硬盘、NAS甚至旧手机里,每次想找个片子看都得折腾半天,那你一定需要个“媒体中心”。市面上…...

基于FPGA的以太网设计(五):ARP协议状态机实战与板级调试

1. 从仿真到上板:ARP状态机调试的“最后一公里” 上一篇文章我们详细拆解了ARP接收和发送模块的Verilog代码实现,相信你已经对状态机的每个状态跳转和数据流处理有了清晰的认识。代码写完了,仿真波形看起来也完美无缺,是不是感觉大…...

SER5 Pro迷你主机实战:ESXi+虚拟机打造高效All in One家庭服务器

1. 为什么选择SER5 Pro作为你的家庭服务器核心? 如果你和我一样,是个喜欢折腾但又怕麻烦的家庭技术爱好者,那么一台小巧、安静、性能又够用的迷你主机,绝对是打造家庭数字中枢的绝佳选择。我前前后后用过好几款迷你主机&#xff0…...

C++内存池在Tick级交易系统中的5大致命缺陷:从L3缓存未命中到NUMA跨节点延迟,如何72小时内重构?

第一章:Tick级交易系统内存池的性能悖论与重构动因在毫秒乃至微秒级响应要求的Tick级交易系统中,内存池本应是降低GC压力、规避堆分配抖动的核心基础设施。然而实践中却频繁观测到一种反直觉现象:启用定制化内存池后,订单匹配延迟…...

【自然语言处理】从编译器视角看NLP:分层架构的共性与技术迁移路径

1. 引言:当编译器工程师遇上自然语言 大家好,我是老张,一个在AI和编译器领域摸爬滚打了十多年的老码农。这些年,我见过不少工程师朋友,一提到自然语言处理(NLP),就觉得那是另一个世界…...

IEEE期刊分区大洗牌:2025年这些1区期刊跌到2区,你的论文还值钱吗?

IEEE期刊分区洗牌:科研价值锚点迁移下的理性应对指南 又到了年底,对于很多科研工作者,尤其是计算机、电子、通信等领域的学者和研究生来说,除了年终总结,还有一件牵动神经的大事——中科院期刊分区表的更新。这几天&am…...

Temenos T24核心系统开发实战:JBase Basic语言从入门到精通

1. 初识T24与JBase Basic:银行IT人的新起点 如果你刚加入一家银行的科技部门,或者被分配去维护那个听起来就很高大上的“核心系统”,那么“Temenos T24”这个名字很快就会成为你日常的一部分。别紧张,我第一次接触它的时候也是一头…...

告别自签名警告:基于acme.sh为宝塔面板部署免费IP SSL证书实战

1. 为什么你的宝塔面板总被浏览器“嫌弃”? 每次打开宝塔面板,看到浏览器地址栏那个刺眼的红色“不安全”警告,或者那个需要你手动点击“高级”->“继续前往”的提示,是不是感觉特别不专业?心里还会犯嘀咕&#xff…...

Flutter 三方库 flutter_auto_localizations 的鸿蒙化适配指南 - 国际化研发的减速带切除术、在鸿蒙端实现多语言代码自动生成实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 flutter_auto_localizations 的鸿蒙化适配指南 - 国际化研发的减速带切除术、在鸿蒙端实现多语言代码自动生成实战 前言 【里程碑达成:我们已跨越 150 篇大关&…...

Flutter 三方库 shelf_open_api 的鸿蒙化适配指南 - 契约驱动的开发美学、在鸿蒙端实现 Shelf 的 OpenAPI 自动生成实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 shelf_open_api 的鸿蒙化适配指南 - 契约驱动的开发美学、在鸿蒙端实现 Shelf 的 OpenAPI 自动生成实战 前言 在进行 Flutter for OpenHarmony 的端侧微服务开发、或是为鸿…...

【ZERO-PAD】基于微雪RP2040-ZERO与QMK的模块化桌面宏键盘DIY全攻略

【ZERO-PAD】基于微雪RP2040-ZERO与QMK的模块化桌面宏键盘DIY全攻略 大家好,最近在捣鼓桌面快捷键盘,发现很多成品要么太贵,要么功能固定不够好玩。于是,我找到了立创开源平台上一个叫【ZERO-PAD】的项目,它完美解决了…...

nanobot效果展示:Qwen3-4B在QQ中执行netstat -tuln并解释监听端口含义

nanobot效果展示:Qwen3-4B在QQ中执行netstat -tuln并解释监听端口含义 1. 引言:当AI助手遇上系统命令 想象一下,你正在管理一台服务器,需要快速查看哪些端口正在监听网络连接。你打开终端,输入熟悉的 netstat -tuln …...

全栈可视化开发新选择 网易 CodeWave 开发效率拉满

一、什么是网易智企- CodeWave? 网易智企- CodeWave 是网易数智基于自研智能开发底座和 NASL 全栈编程语言打造的企业级应用研发平台,也是国内唯一的「全栈」可视化开发平台。它区别于传统 AI 编码工具仅聚焦代码层提效的局限,实现了数据、页面、逻辑和流程的一体化设计与交付…...

2024年企业级网络架构实战:跨地域OSPF与BGP混合组网解析

1. 为什么你的企业网络需要OSPF与BGP混合组网? 如果你是一家正在快速扩张的集团企业IT负责人,或者是一名负责网络架构的工程师,你一定遇到过这样的烦恼:总部和分公司之间的网络连接,要么慢得像蜗牛,要么三天…...

EPLAN端子排自定义:从零搭建到高效维护

1. 为什么你需要自定义端子排?从“能用”到“好用”的必经之路 我刚入行那会儿,接手一个改造项目,图纸里的端子排简直是一场灾难。端子编号东一个西一个,有的页面上是“X1:1”,下一页就跳到了“X1:5”,中间…...

KART-RERANK模型压缩与加速:面向边缘设备的部署实践

KART-RERANK模型压缩与加速:面向边缘设备的部署实践 最近在折腾一个很有意思的项目,就是把一个原本在云端跑得挺好的排序模型,想办法塞到资源紧张的边缘设备里去。这个模型叫KART-RERANK,原本是用来做搜索结果精排的,…...

OFA图像描述系统快速部署指南:一键启动Web服务,零配置使用AI描述图片

OFA图像描述系统快速部署指南:一键启动Web服务,零配置使用AI描述图片 1. 项目介绍:让图片“开口说话”的智能工具 你有没有遇到过这样的场景?手头有一堆图片,需要为它们配上文字说明,但自己写又耗时费力&…...

DDR5内存上电初始化全解析:从RESET信号到稳定工作的完整流程(附时序图)

DDR5内存上电初始化:硬件工程师的实战手册与深度时序剖析 当一块全新的DDR5内存条插入主板,或者一个嵌入式系统的电源开关被按下,一场精密而有序的“交响乐”便在芯片内部悄然奏响。对于硬件工程师和嵌入式开发者而言,理解这场“交…...

Ubuntu 20.04下WireShark安装后无法抓包?3步搞定权限问题

Ubuntu 20.04下WireShark权限问题深度解析:从原理到实战的完整指南 你是否也曾在Ubuntu上兴致勃勃地打开WireShark,准备一探网络流量的究竟,却被一句冷冰冰的“You don‘t have permission to capture on that device”浇了个透心凉&#xff…...

从理论到代码:YALMIP工具箱在双层优化中的完整工作流(含KKT条件自动生成技巧)

从理论到代码:YALMIP工具箱在双层优化中的完整工作流(含KKT条件自动生成技巧) 如果你正在研究能源系统、博弈论或者供应链管理,很可能已经遇到了一个让人头疼的数学问题——双层优化。它像是一个嵌套的决策游戏,上层领…...

【人工智能技术全景解析】从LLM到AI Agent:核心架构与多模态应用实践

1. 从“超级大脑”到“全能助手”:LLM如何成为AI Agent的基石 如果你最近用过豆包、文心一言或者ChatGPT这类聊天机器人,你可能会惊叹于它们流畅的对话和丰富的知识。但你可能也发现了,它们更像一个“超级大脑”——你问,它答&…...

腾讯优图AI解析实测:上传图片自动识别文字、表格、公式、印章

腾讯优图AI解析实测:上传图片自动识别文字、表格、公式、印章 前言 你有没有遇到过这样的烦恼?领导发来一份扫描的合同PDF,让你把里面的关键信息整理成表格;或者收到一份满是公式和图表的研究报告,需要把内容提取出来…...

Qwen3-ForcedAligner高并发实践:基于Node.js的异步处理服务

Qwen3-ForcedAligner高并发实践:基于Node.js的异步处理服务 1. 引言 语音识别和强制对齐技术在现代AI应用中扮演着越来越重要的角色,特别是当我们需要处理大量音频数据并为每个词或字符标注精确的时间戳时。Qwen3-ForcedAligner-0.6B作为一个强大的强制…...

阿里CosyVoice2快速入门:5步实现高质量语音合成与克隆

阿里CosyVoice2快速入门:5步实现高质量语音合成与克隆 1. 引言 想象一下,你手头有一段3秒钟的录音,可能是同事的问候,也可能是你自己的声音。现在,你想让这个声音为你朗读一份全新的产品介绍,或者用四川话…...

记录我重写了 Agent 的 Plan 系统:为什么 Replan 是可进化 Agent 的关键

摘要Agent 项目都在讲"自主规划",但落到工程上,往往是开场列一份 Todo,或者让模型临场改主意。我最近在维护SkillLite 的时候遇到一个在更底层的事:把"重新规划"做成一个可观测、可度量、可沉淀为进化信号的系…...