debian/control中的包关系
软件包依赖就是软件包关系的一种,一般用 Depends 表示。
每个软件包都可以和其他软件包有各种不同的关系。除 Depends 外,还有 Recommends、Suggests、Pre-Depends、Breaks、Conflicts、Provides 和 Replaces,软件包管理工具(如 apt-get、aptitude、dpkg)在安装、升级或删除软件包时,会依据这些关系采取适当的操作,以确保系统的稳定性和一致性。
1 软件包关系说明
Depends
- 定义:此软件包仅当它依赖的软件包均已安装后才可以安装。
- 用途:指定的软件包是程序所必须的软件包,如果缺少这些依赖,程序将无法正常运行或存在严重问题。
Recommends
- 定义:推荐安装的软件包,但不是严格必须的。
- 用途:这些软件包可以增强程序功能。aptitude 和 apt-get 会在安装你的软件包时自动安装推荐的软件包,用户可以选择禁用这个行为。dpkg 会忽略此项。
Suggests
- 定义:建议安装的软件包,不是必须的。
- 用途:这些软件包可以与程序更好地协同工作,但不是必须的。所有前端程序通常不会询问是否安装建议的软件包。aptitude 可以配置为自动安装建议的软件包,但默认不会这样做。dpkg 和 apt-get 会忽略此项。
Pre-Depends
- 定义:此项中的依赖相比于
Depends
重要程度更高,仅在预依赖的软件包已安装并正确配置后,才能安装此软件包 - 用途:指定的软件包是程序安装前必须安装和配置完成的。应非常慎重使用,建议尽量避免使用此项。
Breaks
- 定义:当前软件包安装后,会破坏列出的软件包。
- 用途:通常
Breaks
会附带一个版本号说明,表示版本低于某个特定值的软件包会被破坏。软件包管理工具会选择升级这些被破坏的软件包作为解决方案。
Provides
- 定义:声明当前软件包提供了某个已存在的虚拟软件包的功能。
- 用途:用于某些类型的软件包定义多个备用虚拟名称。
Replaces
- 定义:当当前软件包要替换其他软件包的某些文件,或完全替换另一个软件包时使用。
- 用途:列出将被替换的软件包。通常与
Conflicts
一起使用,以确保被替换的软件包中的文件会被当前软件包中的文件覆盖。
这有助于开发者正确填写软件包关系项,确保软件包能在用户的系统上正常安装和运行。
2 依赖项填写规范
debian/control 文件是 Debian 软件包的元数据文件,包含了关于包的各种信息,包括包名、版本、维护者、依赖关系等。
所有的软件包关系都定义在在 debian/control 文件中,其中 Depends
字段主要负责控制软件包的依赖关系,用于声明软件包的直接依赖。
以下是一个 control 示例:
Source: example-package-kylin
Section: web
Priority: optional
Maintainer: Example Maintainer <maintainer@kylinos.cn>
Build-Depends: debhelper (>= 11), dh-systemd (>= 1.5)
Standards-Version: 4.1.4
Homepage: https://www.kylinos.cn/Package: example-package-kylin
Architecture: any
Depends: libwebp6 (>= 0.6.1), libc6 (>> 2.27), python3 | python3-minimal, ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}
Description: An example package for Kylin systemsThis package provides an example service with web capabilities.It relies on several other packages to function properly, includingessential libraries and optional Python support.
Depends
字段填写指导
1. 确定必需依赖包:列出在安装或运行软件包时必须存在的其他软件包。这些是绝对必要的依赖包。如果缺少其中任何一个,软件包将无法正常工作。
2. 格式:Depends
字段的格式为逗号分隔的依赖项列表。每个依赖项可以指定包名和可选的版本约束。例如:
Depends: libwebp6 (>= 0.6.1), libc6 (>> 2.27)
3. 版本约束:可以使用版本约束来指定依赖包的最低、最高或特定版本。常用的版本约束符号包括:
>=
表示大于或等于<=
表示小于或等于=
表示等于>>
表示严格大于<<
表示严格小于
4. 逻辑运算符:可以使用逻辑运算符来指定依赖关系的选择。例如,使用竖线 |
表示逻辑 “或” 关系,表示多个包中的一个即可满足依赖关系:
Depends: python3 | python3-minimal
5. 虚拟包:如果依赖项是一个虚拟包,确保列出的包提供了该虚拟包。例如:
Depends: mail-transport-agent
注释:在麒麟系统中,虚拟包是一个抽象的包概念,它本身不直接对应任何实际的软件包,而是由一个或多个实际的软件包提供相应的功能。虚拟包用来表示一组可以互换的软件包的功能。
示例:mail-transport-agent
- 定义:mail-transport-agent(MTA)是一个虚拟包,它代表了一个邮件传输代理的功能,这是用于在网络上发送和接收电子邮件的软件。
- 提供者:多个包如 exim4-daemon-light, postfix, sendmail 等都可以提供 mail-transport-agent 虚拟包。这意味着这些软件都具备邮件传输代理的功能。
- 实现方式:安装此软件包时,麒麟系统的包管理系统会检查系统中是否已安装提供 mail-transport-agent 虚拟包的软件包。如果没有,系统会提示用户安装一个提供该虚拟包的软件包。用户可以选择安装 exim4, postfix, sendmail 或任何其他提供此虚拟包的软件。
这种方式确保软件包能够适应用户的不同选择,而不是硬编码对某个特定软件包的依赖,提高了包的通用性和灵活性。
6. 自动依赖:当软件包依赖于某些共享库或其他资源时,这些依赖可能需要通过特殊的变量(例如: ${shlibs:Depends}
, ${misc:Depends}
和 ${perl:Depends}
)来自动生成,以确保软件包能够正确地链接到所需的库。
Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}
以上填写规范中,尤其需要注意自动依赖的填写,后续会针对自动依赖做说明
3 自动依赖
在软件包的构建过程中,自动依赖变量 ${shlibs:Depends}、${perl:Depends} 和 ${misc:Depends} 的使用大大简化了依赖管理工作。这些变量在软件包的编译过程中,通过 debhelper 工具自动替换为具体的依赖包列表,确保软件包在运行时所需的所有库和组件都会被正确安装。
${shlibs:Depends}
用途:自动添加由共享库引起的依赖,主要针对依赖特定版本动态链接库的 C 和 C++ 程序。
原理:dpkg-shlibdeps 工具在构建过程中扫描当前编译的软件包所生成的可执行文件和动态库,分析它们所依赖的共享库,并根据编译环境中提供的 /var/lib/dpkg/info/*.symbols 或 *.shlibs 文件确定所需的包及其版本要求,自动将这些依赖添加到 Depends 字段。
- 共享库扫描:dpkg-shlibdeps 工具会扫描软件包中的二进制文件,确定其所链接的共享库以及使用的符号。
- 符号文件:/var/lib/dpkg/info/*.symbols 文件包含了共享库的符号信息,用于精确确定依赖关系。开发者应当维护好这些符号文件,以确保依赖关系的准确性。
- 版本控制:基于符号文件,dpkg-shlibdeps 会为每个依赖库生成准确的版本需求,避免由于库版本不匹配导致的运行时错误。
${perl:Depends}
用途:自动包括 Perl 脚本或模块所需的 Perl 版本和其他模块依赖。
原理:dh_perl 工具分析 Perl 程序的用法,自动识别并添加所需的 Perl 版本和 CPAN 模块依赖。
- Perl 版本:dh_perl 工具能够识别所需的 Perl 版本,并将其添加到依赖列表中。
- 模块依赖:对于使用 CPAN 模块的脚本,dh_perl 会自动添加这些模块的依赖,确保在安装包时,这些模块也会一并安装。
${misc:Depends}
用途:包含难以归类的杂项依赖。
原理:如果你的软件包需要一些特殊的工具或脚本来安装,而这些工具和脚本的依赖项不属于共享库或 Perl 模块,那么这些依赖项会被 ${misc:Depends} 自动添加。
- 杂项依赖:对于那些不属于共享库或 Perl 模块的依赖项,misc:Depends 可以确保它们也会被正确包含。
- 举例:假设你在使用 debhelper 工具来帮助安装你的软件包,这些工具可能需要额外的一些依赖项。${misc:Depends} 会自动识别并添加这些依赖,以确保你的软件包能正确安装和运行。
相关文章:
debian/control中的包关系
软件包依赖就是软件包关系的一种,一般用 Depends 表示。 每个软件包都可以和其他软件包有各种不同的关系。除 Depends 外,还有 Recommends、Suggests、Pre-Depends、Breaks、Conflicts、Provides 和 Replaces,软件包管理工具(如 …...
python学习第三天
条件判断 条件判断使用if、elif和else关键字。它们用于根据条件执行不同的代码块。 # 条件判断 age 18 if age < 18:print("你还是个孩子!") elif age 18:print("永远十八岁!") else:print("你还年轻!")…...
k8s架构及服务详解
目录 1.1.容器是什么1.2.Namespace1.3.rootfs5.1.Service介绍5.1.1.Serice简介 5.1.1.1什么是Service5.1.1.2.Service的创建5.1.1.3.检测服务5.1.1.4.在运行的容器中远程执行命令 5.2.连接集群外部的服务 5.2.1.介绍服务endpoint5.2.2.手动配置服务的endpoint5.2.3.为外部服务…...
Unity中动态切换光照贴图LightProbe的方法
关键代码:LightmapSettings.lightmaps lightmapDatas; LightmapData中操作三张图:lightmapColor,lightmapDir,以及一张ShadowMap 这里只操作前两张: using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public cl…...
基于Matlab的多目标粒子群优化
在复杂系统的设计、决策与优化问题中,常常需要同时兼顾多个相互冲突的目标,多目标粒子群优化(MOPSO)算法应运而生,作为群体智能优化算法家族中的重要成员,它为解决此类棘手难题提供了高效且富有创新性的解决…...
Android Studio 新版本Gradle发布本地Maven仓库示例
发布代码到JitPack示例:https://blog.csdn.net/loutengyuan/article/details/145938967 以下是基于 Android Studio 24.2.2(Gradle 8.10.2 AGP 8.8.0 JDK17) 的本地 Maven 仓库发布示例,包含aar和jar的不同配置: 1.…...
Langchain解锁LLM大语言模型的结构化输出能力(多种实现方案)
在 LangChain解锁LLM大语言模型的结构化输出能力:调用 with_structured_output() 方法 这篇博客中,我们了解了格式化LLM输出内容的必要性以及如何通过调用langchain框架中提供的 with_structured_output() 方法对LLM输出进行格式化(三种可选方…...
深入理解Spring @Async:异步编程的利器与实战指南
一、为什么需要异步编程? 在现代高并发系统中,同步阻塞式编程会带来两大核心问题: // 同步处理示例 public void processOrder(Order order) {// 1. 保存订单(耗时50ms)orderRepository.save(order); // 2. 发送短信…...
让Word插上AI的翅膀:如何把DeepSeek装进Word
在日常办公中,微软的Word无疑是我们最常用的文字处理工具。无论是撰写报告、编辑文档,还是整理笔记,Word都能胜任。然而,随着AI技术的飞速发展,尤其是DeepSeek的出现,我们的文字编辑方式正在发生革命性的变…...
清华DeepSeek深度探索与进阶指南
「清华北大-Deepseek使用手册」 链接:https://pan.quark.cn/s/98782f7d61dc 「清华大学Deepseek整理) 1-6版本链接:https://pan.quark.cn/s/72194e32428a AI学术工具公测链接:https://pan.baidu.com/s/104w_uBB2F42Da0qnk78_ew …...
迁移学习策略全景解析:从理论到产业落地的技术跃迁
(2025年最新技术实践指南) 一、迁移学习的范式革命与核心价值 在人工智能进入"大模型时代"的今天,迁移学习已成为突破数据瓶颈、降低训练成本的关键技术。本文基于2025年最新技术进展,系统梳理六大核心策略及其在产业实…...
WireGuard搭建网络,供整个公司使用
一、清理现有配置(如已有失败尝试) # 停止并删除现有 WireGuard 接口 sudo wg-quick down wg0 sudo rm -rf /etc/wireguard/wg0.conf# 验证接口已删除 (执行后应该看不到 wg0) ifconfig二、服务器端完整配置流程 1. 安装 WireGuard sudo apt update &…...
MyAgent:用AI开发AI,开启智能编程的产业革命
在人工智能技术爆发的2025年,MyAgent智能体平台凭借其独特的“AI开发AI”模式,正在重构全球软件开发行业的底层逻辑。这一创新范式不仅将自然语言处理、机器学习、RPA(机器人流程自动化)等技术深度融合,更通过“…...
Cherno C++ P60 为什么不用using namespace std
这篇文章我们讲一下之前写代码的时候的一个习惯,也就是不使用using namespace std。如果我们接触过最早的C教程,那么第一节课都会让我们写如下的代码: #include<iostream>using namespace std;int main() {cout << "Hello …...
el-select的下拉选择框插入el-checkbox
el-check注意这里要使用model-value绑定数据 <el-selectv-model"selectDevice"multiplecollapse-tags:multiple-limit"5"style"width: 200px"popper-class"select-popover-class" ><el-optionv-for"item in deviceList…...
M系列芯片 MacOS 在 Conda 环境中安装 TensorFlow 2 和 Keras 3 完整指南
目录 1. 引言2. 环境准备3. 安装 TensorFlow 和必要依赖4. 结语Reference 1. 引言 Keras 是搞深度学习很可爱的工具,其友好的接口让我总是将其作为搭建模型原型的首选。然而,当我希望在 M 系列芯片的MacBook Pro上使用 Keras时,使用Conda和P…...
GitHub教程
目录 1.是什么?2.安装3.创建库3.增删改查4.远程仓库5.分支6.标签7.使用流程8.总结 1.是什么? Git 是一个命令行工具,但也有许多图形用户界面可用。本地仓库,安装包下载到本地。Git 的一个流行 GUI 是 GitHub,它可以方便地管理存储库、推送…...
《JavaScript解题秘籍:力扣队列与栈的高效解题策略》
232.用栈实现队列 力扣题目链接(opens new window) 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。 示例: MyQueue queue new MyQueue(); queue…...
Supra软件更新:AGRV2K CPLD支持无源晶体做时钟输入
Supra软件更新:AGRV2K CPLD支持无源晶体做时钟输入 AGRV2K CPLD支持无源晶体做时钟输入,和AG32一样接入OSC_IN和OSC_OUT管脚。 VE管脚文件设为PIN_HSE,如: clk PIN_HSE ledout[0] PIN_31 ledout[1] PIN_32 ...... 在下载烧录文…...
简易的微信聊天网页版【项目测试报告】
文章目录 一、项目背景二、项目简介登录功能好友列表页面好友会话页面 三、测试工具和环境四、测试计划测试用例部分人工手动测试截图web自动化测试测试用例代码框架配置内容代码文件(Utils.py)登录页面代码文件(WeChatLogin.py)好…...
nio使用
NIO : new Input/Output,,在java1.4中引入的一套新的IO操作API,,,旨在替代传统的IO(即BIO:Blocking IO),,,nio提供了更高效的 文件和网络IO的 操作…...
【蓝桥杯单片机】第十二届省赛
一、真题 二、模块构建 1.编写初始化函数(init.c) void Cls_Peripheral(void); 关闭led led对应的锁存器由Y4C控制关闭蜂鸣器和继电器 由Y5C控制 2.编写LED函数(led.c) void Led_Disp(unsigned char ucLed); 将ucLed取反的值赋给P0 开启锁存器…...
Jenkins与Flutter项目持续集成实战指南
一、环境准备 1. 基础环境要求 Jenkins Server:已安装JDK 11,建议使用Linux服务器(Ubuntu/CentOS)Flutter SDK:全局安装或通过工具动态管理构建代理节点: Android构建:需Android SDK、Gradle、…...
linux常见操作命令
查看目录和文件 ls:列出目录内容。 常用选项: -l:以长格式显示,显示文件的权限、所有者、大小、修改时间等详细信息。-a:显示所有文件和目录,包括隐藏文件(以 . 开头的文件)。-h&…...
6.人工智能与机器学习
一、人工智能基本原理 1. 人工智能(AI)定义与范畴 核心目标:模拟人类智能行为(如推理、学习、决策)分类: 弱人工智能(Narrow AI):专精单一任务(如AlphaGo、…...
GPU架构分类
一、NVIDIA的GPU架构 NVIDIA是全球领先的GPU生产商,其GPU架构在图形渲染、高性能计算和人工智能等领域具有广泛应用。NVIDIA的GPU架构经历了多次迭代,以下是一些重要的架构: 1. Tesla(特斯拉)架构(2006年…...
23种设计模式之单例模式(Singleton Pattern)【设计模式】
文章目录 一、简介二、关键点三、实现单例模式的步骤四、C#示例4.1 简单的单例模式4.2 线程安全的单例模式(双重检查锁定)4.3 静态初始化单例模式 五、单例模式优缺点5.1 优点5.2 缺点 六、适用场景七、示例的现实应用 一、简介 单例模式(Si…...
MAX232数据手册:搭建电平转换桥梁,助力串口稳定通信
在现代电子设备的通信领域,串口通信因其简单可靠而被广泛应用。MAX232 芯片作为串口通信中的关键角色,发挥着不可或缺的作用。下面,我们将依据提供的资料,深入解读 MAX232 芯片的各项特性、参数以及应用要点。 一、引脚说明 MAX2…...
Day 55 卡玛笔记
这是基于代码随想录的每日打卡 所有可达路径 题目描述 给定一个有 n 个节点的有向无环图,节点编号从 1 到 n。请编写一个函数,找出并返回所有从节点 1 到节点 n 的路径。每条路径应以节点编号的列表形式表示。 输入描述 第一行包含两个整数…...
python量化交易——金融数据管理最佳实践——使用qteasy管理本地数据源
文章目录 统一定义的金融历史数据表最重要的数据表数据表的定义交易日历表的定义:交易日历表: trade_calendar qteasy是一个功能全面且易用的量化交易策略框架, Github地址在这里。使用它,能轻松地获取历史数据,创建交易策略并完…...
AVM 环视拼接 鱼眼相机
https://zhuanlan.zhihu.com/p/651306620 AVM 环视拼接方法介绍 从内外参推导IPM变换方程及代码实现(生成AVM环视拼接图)_avm拼接-CSDN博客 经典文献阅读之--Extrinsic Self-calibration of the Surround-view System: A Weakly... (环视系统的外参自…...
计算机基础面试(数据库)
1. 事务的ACID特性?如何通过日志保证原子性和持久性? 专业解答: ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Dura…...
Self-Pro: A Self-Prompt and Tuning Framework for Graph Neural Networks
Self-Pro: A Self-Prompt and Tuning Framework for Graph Neural Networks #paper/GFM/GNN-BASED# #paper/⭐⭐⭐# 注意:这篇文章是每个图一个GCN模型,而不是所有图一个GCN 模型 算是最早的涉及异配图的prompt了 贡献和动机: 非对…...
Spring Boot 与 MyBatis 版本兼容性
初接触Spring Boot,本次使用Spring Boot版本为3.4.3,mybatis的起步依赖版本为3.0.0,在启动时报错,报错代码如下 org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name userMapper…...
WPF 如何使文本显示控件支持显示内容滚动显示
WPF中如何使文本显示控件支持显示内容滚动显示 在WPF中,TextBlock 控件本身并不直接支持滚动功能,因为它的设计初衷是用于静态文本展示。但是,你可以通过一些技巧和自定义控件来实现 TextBlock 的滚动效果。以下是几种常见的方法:…...
1208. 尽可能使字符串相等
目录 一、题目二、思路2.1 解题思路2.2 代码尝试2.3 疑难问题 三、解法四、收获4.1 心得4.2 举一反三 一、题目 二、思路 2.1 解题思路 2.2 代码尝试 class Solution { public:int equalSubstring(string s, string t, int maxCost) {int curcost0;//统计当前开销int left0;…...
Linux系统管理操作
一、关闭防火墙 默认端口号是22,其他端口用不了,这时候就引出关闭防火墙 1.1、systemctl 1.1.1、基本语法 systemctl start | stop | restart | status 服务名 //启动、关闭、重启、查看状态 1.1.2、查看服务的方法 查看/usr/lib/systemd/syst…...
【STM32H743IIT6】将外部SDRAM作为内部SRAM使用的方法及需要解决的问题
前言 STM32H743的片上随机存取存储器(RAM)容量最大约为1KB。对于简单项目而言,这一容量尚可满足需求。但在处理更为复杂的应用程序时,尤其是在随机存取存储器方面,“空间不足”的问题就会不可避免地出现。此时&#x…...
AMD RDNA3 GPU架构解析
本文会通过把AMD的RDNA3架构为例比喻为**“施工公司”**工作模式,深入理解GPU如何高效处理顶点着色、像素计算等任务。 一、施工公司的组织架构 1. 施工公司(WGP)与施工队(CU) WGP(Work Group Processor&…...
博客系统--测试报告
博客系统--测试报告 项目背景项目功能功能测试①登录功能测试②发布博客功能测试③删除文章功能测试④功能测试总结: 自动化测试自动化脚本执行界面: 性能测试 本博文主要针对个人实现的项目《博客系统》去进行功能测试、自动化测试、性能测试࿰…...
打造个人知识库(Page Assist版)- 私人专属AI-本地化部署deepseek
上篇介绍了实现浏览器交互Ai Web Ui - chrome浏览器插件-Page Assist,安装即可使用,实现最简单的本地化部署AI使用。 实现浏览器交互Ai Web Ui-本地化部署的deepseek Ollama Page Assist 本编介绍使用 Page Assist 构建个人知识库,利用个…...
7zip安装与使用
在 Linux 上安装 7zip(7z) 取决于你的操作系统发行版。以下是不同系统的安装方法: 📌 1. Ubuntu / Debian 直接使用 p7zip: sudo apt update sudo apt install -y p7zip-full p7zip-rarp7zip-full → 支持 .7z 压缩和…...
蓝桥杯第15届真题解析
由硬件框图可以知道我们要配置LED 和按键、lcd,解决lcd引脚冲突 LED 先配置LED的八个引脚为GPIO_OutPut,锁存器PD2也是,然后都设置为起始高电平,生成代码时还要去解决引脚冲突问题 按键 按键配置,由原理图按键所对引…...
springboot gradle 多项目创建
1.背景2.创建父项目3.配置gradlew4.创建子项目 1.背景 1.用IDE创建一个父项目(school_project),两个子项目(student_project,teacher_project)。子项目是两个springboot工程 2.使用gradle kotlin进行管理,…...
Protocol Buffers在MCU上的nanopb介绍及使用详解
在嵌入式系统和资源受限的环境中,传统的Protocol Buffers 可能显得过于庞大。因此,nanopb 应运而生,它是一个轻量级的 Protocol Buffers 生成器,专为嵌入式系统设计c语言设计。本文将介绍如何安装和使用 nanopb,以及通…...
leetcode日记(74)扰乱字符串
很有难度的一题,一开始真的绕了很多思维上的弯路。 最开始的想法是递归,看到题目的时候想到动态规划但是完全没有思路应该怎么用,结果确实是递归动态规划。 最开始的想法是构建树,每一层包含这一步划分的方法(实际会…...
Blazor-根级别级联值
根级别级联值注册 using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting;namespace BlazorApp1 {public class Program{public static async Task Main(string[] args){var builder WebAssemblyHostBuilder.CreateDefault…...
懒加载能够解决Spring循环依赖吗
懒加载本身并不能直接解决 Spring 循环依赖问题,但它可以在一定程度上缓解或绕过循环依赖带来的问题,下面详细分析: 1. 什么是 Spring 循环依赖 循环依赖指的是两个或多个 Bean 之间相互依赖,形成一个闭环。例如,Bea…...
Matlab中使用GUIDE工具开发图形用户界面(GUI)
文章目录 1. 初识GUIDE工具1.1 .m 和 .fig的区别和联系1.2 GUIDE工具的详细介绍1.3 GUI控件的属性1.4 自动生成的 .m 文件1.5 回调函数 2. GUI中常见的函数2.1 get 和 set 函数2.2 handles.Tag2.3 OpeningFcn 和 OutputFcn2.4 Callback2.5 CreateFcn 和 DeleteFcn2.6 ButtonDow…...
[通俗易懂C++]:引用返回和地址返回
在之前的文章中已经提到过,当使用按值传递时会创建参数的一个副本到函数中。对于基本类型(复制成本较低),这是可以的。但对于类类型(如 std::string ),复制通常成本较高。我们可以通过使用(const)引用传递(或按地址传递)来避免进行昂贵的复制。 这篇文章主要介绍一些…...