【C++标准化改造黄金法则】:20年专家亲授企业级系统升级秘诀

第一章:2025 全球 C++ 及系统软件技术大会:老旧 C++ 项目的标准化改造指南

在现代软件工程实践中,大量遗留的 C++ 项目因长期维护、历史技术栈限制和缺乏统一规范,面临可维护性差、编译警告泛滥、安全隐患频发等问题。对其进行标准化改造已成为企业技术升级的关键任务。

重构前的评估与规划

改造的第一步是全面评估现有代码库的技术债务。推荐使用静态分析工具(如 Clang-Tidy)扫描项目,识别不合规的语法结构和潜在缺陷。执行以下命令可生成初步报告:

# 扫描所有 .cpp 文件并输出建议
clang-tidy src/*.cpp -checks='modernize-*,-modernize-use-trailing-return-type' --warnings-as-errors='*' -header-filter=include/.*

逐步引入现代 C++ 特性

优先替换已废弃的语法模式,例如将原始指针管理改为智能指针,避免手动调用 delete。示例如下:

// 改造前:裸指针易导致内存泄漏
Widget* ptr = new Widget();
delete ptr;

// 改造后:使用 unique_ptr 自动管理生命周期
#include <memory>
std::unique_ptr<Widget> ptr = std::make_unique<Widget>();
  • 启用 C++17 或更高标准编译选项(-std=c++17)
  • 统一命名规范,采用 snake_case 或 PascalCase 并写入编码规范文档
  • 使用 using 替代 typedef 提高可读性

构建自动化迁移流水线

为确保改造过程可控,应建立 CI/CD 流水线自动执行格式化与检查。以下表格列出关键工具及其用途:
工具用途集成方式
Clang-Format代码风格统一预提交钩子
Clang-Tidy现代化建议与警告检测CI 构建阶段
CMake + Ninja跨平台构建一致性标准化构建脚本
graph LR A[原始代码] --> B{静态分析} B --> C[应用自动修复] C --> D[人工审查] D --> E[合并至主干] E --> F[持续监控]

第二章:认知与评估——老旧 C++ 项目的技术债全景分析

2.1 理解技术债的根源:从C++98到C++20的演进断层

C++语言历经二十余年演进,版本迭代带来的兼容性压力催生了显著的技术债。早期C++98依赖手动内存管理与宏定义,代码冗余且易错。
资源管理范式跃迁
智能指针的引入标志着RAII原则的强化:
// C++98 风格
int* p = new int(42);
// 忘记 delete 即导致内存泄漏

// C++11 起支持
std::unique_ptr<int> ptr = std::make_unique<int>(42);
// 自动释放,异常安全
上述演变减少了显式析构需求,但遗留系统迁移成本高昂。
标准库功能断层
现代特性如constexpr、概念(Concepts)在旧项目中无法使用,形成能力鸿沟。企业为稳定性牺牲新特性,加剧维护负担。
  • C++98:无标准多线程支持
  • C++11:引入std::thread与原子操作
  • C++20:协程与模块化初步落地

2.2 静态分析工具实战:Clang-Tidy与PVS-Studio在代码体检中的应用

Clang-Tidy快速集成与典型检查
Clang-Tidy作为LLVM生态中的静态分析利器,支持C++编码规范、性能优化和潜在缺陷检测。通过编译命令集成,可直接扫描源码:
clang-tidy source.cpp -checks=-*,modernize-use-nullptr
该命令启用modernize-use-nullptr检查项,自动提示原始字面量0应替换为类型安全的nullptr,提升代码健壮性。
PVS-Studio深度缺陷挖掘
PVS-Studio擅长发现复杂逻辑漏洞,如内存泄漏、数组越界等。其分析结果以结构化表格呈现:
文件行号问题类型建议
main.cpp45内存未释放添加delete[] ptr;
utils.cpp102数组越界检查索引边界
结合CI流程,两类工具形成互补防线,显著提升代码质量基线。

2.3 架构腐化模式识别:单体、紧耦合与全局状态的典型症状

在长期演进过程中,系统常因设计妥协逐渐显现架构腐化。最典型的三种模式是单体膨胀、模块间紧耦合以及滥用全局状态。
单体服务膨胀的症状
当单一应用承载过多业务功能,代码库规模失控,变更影响面难以评估。此时构建和部署周期变长,团队协作效率下降。
紧耦合的代码表现
模块之间通过具体实现而非接口通信,导致一处修改引发连锁反应。例如:

public class OrderService {
    private PaymentProcessor processor = new PaymentProcessor(); // 直接实例化
    public void process(Order order) {
        processor.execute(order); // 强依赖具体类
    }
}
该代码直接持有具体实现,违反依赖倒置原则,难以替换或测试。
全局状态引发的问题
共享静态变量或单例状态会导致不可预测的行为,尤其在并发场景下。此类状态使单元测试相互干扰,破坏可重复性。
  • 频繁出现竞态条件
  • 测试必须按特定顺序执行
  • 本地调试结果无法复现线上问题

2.4 可测性与可维护性量化评估模型构建

在软件系统演进过程中,建立科学的量化评估模型对保障长期质量至关重要。通过提取关键代码特征与运行时指标,可实现对可测性与可维护性的客观度量。
核心评估维度
  • 代码复杂度(Cyclomatic Complexity)
  • 模块耦合度(Coupling Between Objects)
  • 单元测试覆盖率(Line Coverage)
  • 依赖注入程度(DI Ratio)
评估模型实现示例
// 计算可维护性指数 (MI)
func CalculateMaintainabilityIndex(cc, loc int, coverage float64) float64 {
    // cc: 圈复杂度, loc: 代码行数, coverage: 覆盖率
    mi := 171 - 5.2*math.Log(float64(cc)) - 0.23*float64(loc) - 16.2*math.Log(coverage+1e-9)
    return math.Max(0, math.Min(100, mi)) // 归一化至0-100
}
该公式基于工业界广泛采用的Maintainability Index变体,结合圈复杂度、代码规模与测试覆盖进行加权计算,数值越高表示维护成本越低。
评估结果可视化表
模块圈复杂度测试覆盖率可维护性得分
UserService1285%78
PaymentGateway4540%32

2.5 制定改造优先级矩阵:风险、影响与收益的三维权衡

在系统重构过程中,资源有限性要求团队科学评估改造项的优先级。通过构建优先级矩阵,可将每个技术任务从风险、业务影响和预期收益三个维度进行量化评分。
优先级评分模型
采用加权打分法对候选改造项进行评估,评分标准如下:
维度评分范围说明
风险1-5技术复杂度、依赖广度、回滚难度
影响1-5影响用户数、核心流程覆盖度
收益1-5性能提升、运维成本降低等
最终优先级 = (影响 × 权重影响) + (收益 × 权重收益) - (风险 × 权重风险)
自动化计算示例

# 计算优先级得分
def calculate_priority(impact, benefit, risk):
    weights = {'impact': 0.4, 'benefit': 0.4, 'risk': 0.2}
    return impact * weights['impact'] + benefit * weights['benefit'] - risk * weights['risk']

score = calculate_priority(impact=5, benefit=4, risk=3)
print(f"优先级得分: {score:.2f}")  # 输出: 2.80
该函数将各维度按预设权重融合,输出连续数值便于横向比较。高影响、高收益且低风险的任务将获得更高排序。

第三章:核心语言特性的现代化迁移策略

3.1 智能指针替代原始指针:RAII原则的工程化落地

在C++工程实践中,智能指针是RAII(Resource Acquisition Is Initialization)原则的核心体现。通过将资源管理绑定到对象生命周期,有效避免内存泄漏与资源未释放问题。
常见智能指针类型
  • std::unique_ptr:独占式所有权,轻量高效;
  • std::shared_ptr:共享所有权,基于引用计数;
  • std::weak_ptr:配合shared_ptr打破循环引用。
代码示例:unique_ptr的安全资源管理
#include <memory>
#include <iostream>

int main() {
    auto ptr = std::make_unique<int>(42); // RAII自动释放
    std::cout << *ptr << std::endl;       // 使用安全
    return 0; // 离开作用域,自动调用析构
}
上述代码中,make_unique创建的对象在栈展开时自动释放,无需手动调用delete,从根本上规避了内存泄漏风险。

3.2 auto与范围for循环:提升代码可读性与安全性的双重实践

在现代C++开发中,auto关键字与范围for循环的结合使用显著提升了代码的可读性与类型安全性。通过自动类型推导,开发者无需显式声明迭代器类型,减少冗余代码。
简化容器遍历
std::vector<int> numbers = {1, 2, 3, 4, 5};
for (const auto& num : numbers) {
    std::cout << num << " ";
}
上述代码中,auto推导出引用类型const int&,避免拷贝开销;范围for隐去迭代器操作,降低出错风险。
优势对比
特性传统for循环auto+范围for
可读性低(需显式迭代器)高
安全性易越界边界安全

3.3 constexpr与编译期计算:性能优化的新范式

编译期计算的核心价值
constexpr 允许函数和变量在编译时求值,将计算从运行时转移到编译期,显著提升执行效率。适用于数学常量、类型元编程等场景。
基本用法示例
constexpr int factorial(int n) {
    return (n <= 1) ? 1 : n * factorial(n - 1);
}
constexpr int val = factorial(5); // 编译期计算为 120
该递归实现可在编译期完成阶乘计算。参数 n 必须为常量表达式,否则无法用于 constexpr 上下文。
性能对比优势
  • 消除运行时重复计算开销
  • 生成更小、更快的二进制代码
  • 支持在模板参数中使用复杂计算结果

第四章:构建系统与依赖管理的标准化重塑

4.1 从Makefile到CMake Modern Style的跃迁路径

在构建系统演进中,Makefile曾是C/C++项目的基石,但其语法晦涩、可维护性差。CMake Modern Style通过语义化命令和目标导向设计,显著提升了跨平台项目的清晰度与可复用性。
核心理念转变
传统Makefile依赖显式规则定义,而CMake Modern Style强调目标(target)和属性设置,利用target_link_libraries、target_include_directories等命令实现精细化控制。

cmake_minimum_required(VERSION 3.16)
project(ModernCpp LANGUAGES CXX)

add_executable(main src/main.cpp)
target_include_directories(main PRIVATE include)
target_compile_features(main PRIVATE cxx_std_17)
上述代码使用现代CMake特性:指定语言标准、私有头文件路径及编译特性。相比Makefile中冗长的编译规则,结构更清晰,依赖管理更安全。
迁移优势对比
  • 消除全局变量污染,采用target作用域隔离
  • 原生支持IDE(如CLion、VS)项目生成
  • 跨平台构建一致性高,无需平台条件判断

4.2 引入Conan或vcpkg实现第三方库的版本可控化

在现代C++项目中,手动管理第三方库依赖易导致版本冲突与构建不一致。引入包管理工具如Conan或vcpkg可实现依赖的自动化与版本可控。
Conan配置示例
from conan import ConanFile

class ExampleRecipe(ConanFile):
    settings = "os", "compiler", "build_type", "arch"
    requires = "boost/1.82.0", "openssl/3.1.0"
    generators = "CMakeToolchain"

    def configure(self):
        self.options["boost"].without_atomic = False
该Conan配方明确定义了boost和openssl的版本,确保团队成员使用一致依赖。通过requires字段声明外部库,避免环境差异引发的问题。
vcpkg集成方式
  • 支持通过vcpkg.json文件锁定依赖版本
  • 可与CMake无缝集成,自动处理头文件与库路径
  • 提供超过1500个预编译库,减少编译时间

4.3 编译选项规范化:统一-Wall -Wextra与静态断言策略

在C/C++项目中,编译器警告是发现潜在缺陷的第一道防线。统一启用 -Wall 和 -Wextra 可显著提升代码健壮性,捕获未使用变量、隐式类型转换等问题。
标准编译警告配置
gcc -std=c11 -Wall -Wextra -Werror -O2 source.c -o output
该命令启用常见警告并将其升级为错误(-Werror),确保问题在开发阶段即被拦截。其中: - -Wall:开启常用警告; - -Wextra:补充更多潜在问题提示; - -Werror:将所有警告视为错误。
结合静态断言增强安全性
使用 _Static_assert 在编译期验证关键假设:
_Static_assert(sizeof(int) == 4, "Int must be 4 bytes");
此断言确保整型长度符合预期,避免跨平台移植时的二进制兼容问题,与编译警告形成双重防护机制。

4.4 CI/CD流水线中集成标准化检查门禁

在现代软件交付流程中,CI/CD流水线的稳定性与代码质量密切相关。通过引入标准化检查门禁,可在代码合并前自动拦截不符合规范的提交。
静态代码检查集成
以GitHub Actions为例,可在流水线中嵌入golangci-lint进行代码质量把关:

- name: Run golangci-lint
  uses: golangci/golangci-lint-action@v3
  with:
    version: latest
    args: --timeout=5m
该配置在构建阶段执行静态分析,--timeout=5m防止长时间阻塞,确保反馈及时。
门禁策略清单
  • 代码格式符合gofmt或prettier标准
  • 单元测试覆盖率不低于80%
  • 安全扫描无高危漏洞
  • 依赖包无已知CVE风险
通过自动化校验规则前置,显著降低线上故障发生率。

第五章:总结与展望

云原生架构的持续演进
现代企业正加速向云原生转型,Kubernetes 已成为容器编排的事实标准。实际案例中,某金融企业在迁移核心交易系统至 K8s 时,通过引入服务网格 Istio 实现了细粒度流量控制与可观测性提升。
  • 采用蓝绿部署策略降低发布风险
  • 利用 Horizontal Pod Autoscaler 根据 QPS 自动扩缩容
  • 集成 Prometheus + Grafana 构建监控闭环
代码即基础设施的实践
以下是一个使用 Terraform 定义 AWS EKS 集群的核心片段,体现了 IaC(Infrastructure as Code)的最佳实践:
resource "aws_eks_cluster" "primary" {
  name     = "prod-eks-cluster"
  role_arn = aws_iam_role.eks_role.arn

  vpc_config {
    subnet_ids = var.subnet_ids
  }

  # 启用日志收集以便审计
  enabled_cluster_log_types = [
    "api",
    "audit",
    "scheduler"
  ]

  tags = {
    Environment = "production"
    Team        = "platform"
  }
}
未来技术融合趋势
技术方向当前应用潜在价值
边缘计算 + AI智能摄像头实时分析降低云端负载,提升响应速度
Serverless DevOpsCI/CD 流水线函数化按需执行,节省资源成本
[用户请求] → API Gateway → Auth Function → Data Processor → DB (DynamoDB)
YOLOv8作物病害检测实战源码 这是一套基于YOLOv8n的农田病虫害目标检测系统,对叶片照片做目标检测,识别健康叶片、褐斑病、白粉病、锈病四类,并给出对应防治建议。全流程纯CPU可跑,配套交付完整Python源码、9章实战教程(md/html/pdf三种格式)、100张自造样本及YOLO标签、训练曲线与混淆矩阵截图、Tkinter界面和答辩PPT。 系统围绕五项功能展开:同一套推理逻辑覆盖图像、视频、摄像头三种来源;图形界面选文件即检测,画面叠彩色框标注病名与置信度,右侧面板同步给出症状与防治措施;检测记录自动写入CSV,统计页一键生成四类病害占比饼图;训练结束自动产出损失与精度曲线;内置防治建议文案库,检测命中即回填面板。 选型用YOLOv8n nano档,参数量约320万、权重约6.2MB,CPU单帧几十毫秒,小样本训练5到8分钟完成。数据由data_gen.py程序化绘制100张叶片图,固定随机种子,重跑分布一致,不依赖公开数据集。依赖全部锁版本,教程第7章整理了19条真实报错及排查方法,第8章给出换模型档、换PlantVillage数据集的迁移路径。 适合做计算机视觉方向课程设计或毕业设计的学生,也适合智慧农业方向想了解检测模型如何落进业务面板的学习者。不需要GPU,不需要系统学过目标检测,教程第3章会按需补齐原理。 使用时先pip install -r requirements.txt装好依赖,download_data.py下载预训练权重,data_gen.py生成样本后train.py训练,完成后用main.py infer批量检测或main.py gui启动界面。 立即下载

相关推荐

数据挖掘实战:决策树 + 聚类 + 关联规则,零 Key 离线可跑(Python 源码)

数据挖掘实战包。用 Python 标准库实现 CART 风格决策树、K-Means 聚类与 Apriori 关联规则,在虚构「星河便利店」会员表和购物篮上跑通分类、分群与购物篮分析,并给出准确率、轮廓系数、支持度/置信度/提升度。零第三方依赖、零 API Key 即可离线跑通。含 4 个样例、离线冒烟、中文 README(含「使用方法」)。均为作者原创可运行源码。MIT。作者 blog.youkuaiyun.com/mtl1994

产业园区运营负责人如何利用平台实现企业创新需求的精准分析与服务推送?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?.docx

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?

高校技术转移办公室人员在推动成果转化落地过程中,如何实现科技成果的高效推介与价值评估?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

国央企创新负责人如何快速掌握本地科技资源分布与匹配情况?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

科技中介服务机构如何通过数智工具提升技术需求挖掘的精准度?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

国央企创新负责人如何实现科技成果的精准识别与高效筛选?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

政府科技管理者如何在政策支持中更精准地识别和支持高价值科技项目?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

高校技术转移办公室人员如何系统化管理科技成果信息?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

科技中介服务机构如何构建标准化、模块化的智能服务工具?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

全桥LLC谐振变化器参数设计资料(闭环仿真+参数设计报告)

内容概要:本文档系统性地介绍了全桥LLC谐振变换器的闭环仿真建模与关键参数设计方法,涵盖其工作原理、谐振元件(如谐振电感、谐振电容、励磁电感)的计算与优化流程,并结合Simulink或Plecs等仿真平台构建闭环控制系统模型,重点验证变频控制策略下的软开关实现、系统增益特性、效率优化及动态响应性能。资料包含完整的仿真模型、参数设计报告、数学计算书及参考文献,支持从理论分析到工程实践的全流程研究,适用于高频高效DC-DC变换器的研发与教学应用。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校学生、科研人员,以及从事开关电源、新能源变换器、工业电源研发的工程技术人员,具备电路拓扑基础与仿真软件操作能力者更佳。; 使用场景及目标:①深入掌握全桥LLC谐振变换器的工作机理与谐振参数设计准则;②学习并实现闭环反馈控制系统的建模与稳定性分析;③支撑科研课题、课程设计、毕业设计或实际产品开发中的拓扑选型与性能验证需求;④通过仿真与计算联动提升对软开关技术与效率优化的理解与应用能力。; 阅读建议:建议结合所提供的仿真文件与设计文档同步操作,按照“建模—参数计算—仿真验证—性能分析”的流程逐步推进,重点关注频率调节对ZVS/ZCS实现的影响,对比不同负载条件下的闭环响应差异,深化对谐振腔特性和控制策略协同作用的理解。

fab-pm-optimizer-python-entry-py39-20261021-v1-1-0

fab-pm-optimizer-python-entry-py39-20261021-v1-1-0

政府科技管理者如何提升区域科技成果转化项目的评价与筛选效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

PSIM-三相维也纳VIENNA整流器电压电流双闭环+中点电位平衡SVPWM控制仿真

内容概要:本文档详细介绍了一种基于PSIM软件实现的三相维也纳(VIENNA)整流器仿真模型,重点实现了电压电流双闭环控制与中点电位平衡的SVPWM调制策略。该仿真系统通过精确的控制算法有效提升了整流器的功率因数,降低了输入电流谐波含量,并解决了三电平拓扑中常见的直流侧中点电位偏移问题,具有较高的工程实用价值,适用于高效率、高功率密度的电力电子系统设计与科研验证。文档还整合了丰富的配套资源,涵盖多种电力电子变换器拓扑结构、先进控制算法及典型应用场景,形成了系统化的技术资料体系,有助于深入理解现代整流技术的核心原理与发展动态。; 适合人群:面向从事电力电子、电气工程、新能源变换系统等领域的科研人员、高校研究生以及具备一定仿真基础的工程技术人员。; 使用场景及目标:①深入研究三相VIENNA整流器的工作机理与控制特性;②掌握电压外环、电流内环双闭环控制结构的设计方法;③理解并实现SVPWM调制技术与中点电位平衡控制策略的协同作用;④开展相关控制算法的仿真验证、性能优化与实验对比,为高性能整流装置的研发提供理论支撑和技术原型。; 阅读建议:建议结合文中列出的其他仿真案例(如PWM整流器、LLC谐振变换器、DAB变换器等)进行横向对比学习,充分利用所提供的PSIM、MATLAB/Simulink等多平台仿真资源,重点关注控制逻辑与主电路的耦合关系,通过参数调试与波形分析深化对系统动态响应和稳态性能的理解,强化“理论—建模—仿真—优化”的闭环研究能力。

产业园区运营负责人如何利用数智工具提升园区企业的技术对接效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

jp-host-release.apk

jp-host-release.apk

ICD10 openGauss版

ICD10 openGauss版

上一篇: 2025 C++并发新纪元(C++27核心特性抢先曝光)
下一篇: 国产AI芯片C++移植效率提升300%?揭秘编译优化与运行时协同设计
ProcePerch
博客等级 码龄1年 150粉丝 1977原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值