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

C++ Primer 函数重载

欢迎阅读我的 【C++Primer】专栏

专栏简介:本专栏主要面向C++初学者,解释C++的一些基本概念和基础语言特性,涉及C++标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级程序设计技术。希望对读者有帮助!

在这里插入图片描述
在这里插入图片描述

目录

  • 6.4 函数重载
    • 定义重载函数
    • const_cast和重载
    • 调用重载的函数
    • 重栽与作用域

6.4 函数重载

如果同一作用域内的儿个函数名字相同但形参列表不同,我们称之为重载(over loaded)函数。例如中我们定义了几个名为print的函数:

void print(const char* cp);
void print(const int*beg,const int*end);
void print(const int ia[],size_t size);

这些函数接受的形参类型不一样,但是执行的操作非常类似。当调用这些函数时,编译器会根据传递的实参类型推断想要的是哪个函数:

int j[2]={0,11};
print("Hello world");//调用print(const char*)
print(j,end(j)-begin(j));//调用print(const int*,size_t)
print(begin(j),end(j))//调用print(const int*,const int*)

函数的名字仅仅是让编详器知道它调用的是哪个函数,而函数重载可以在一定程度上减轻程序员起名字、记名字的负担。

main函数不能重载。

定义重载函数

有一种典型的数据库应用,需要创建几个不同的函数分别根据名字、电话、账户号码等信息查找记录。函数重载使得我们可以定义一组函数,它们的名字都是lookup,但是查找的依据不同。我们能通过以下形式中的任意一种调用lookup函数:

Record lookup(constRccount&J)}//根据Rccount查找记录
Record lookup(constPhone&);//根据Phone查找记录
Record lookup(constNamegJ);//根据Name查找记录
Account acct;
Phone phone;
Record r1=Lookup(acct)}//调用接受Account的版本
Record r2=Lookup(Phone);//调用接取Phone的版本

其中,虽然我们定义的三个函数各不相同,但它们都有同一个名字。编译器根据实参的类型确定应该调用哪一个函数。

对于重载的函数来说,它们应该在形参数量或形参类型上有所不同。在上面的代码中,虽然每个函数都只接受一个参数,但是参数的类型不同。

不允许两个函数除了返回类型外其他所有的要素都相同。假设有两个函数,它们的形参列表一样但是返回类型不同,则第二个函数的声明是错误的:

Record lookup(const Account&);
bool lookup(const Accoun&);//错误:与上一个函敏相比只有返回类型不同

判断两个形参的类型是否相异

有时候两个形参列表看起来不一样,但实际上是相同的:

//每对声明的是同一个函数
Record lookup(const Account &acct);
Record lookup(const Account&);//省略了形参的名守typedef Phone Telno;
Record lookup(const Phone&);
Record lookup(const Telno&);//Telno和Phone的类型相同在第一对声明中,第一个函数给它的形参起了名字,第二个函数没有。形参的名字仅仅起到帮助记忆的作用,有没有它并不影响形参列表的内容。第二对声明看起米类型不同,但事实上Telno不是一种新类型,它只是Phone的别名而已。类型别名为已存在的类型提供另外一个名字,它并不是创建新类型。因此,第二对中一个形参的区别仅在于一个使用类型原来的名字,另一个使用它的别名,从本质上来说它们没什么不同。重载和const形参顶层const不影响传入函数的对象。一个拥有顶层const的形参无法和另一个没有顶层const的形参区分开来:```cpp
Record lookup(Phone);
Record lookup(const Phone);//重复声明了Record lookup(Phone)
Record lookup(Phone*);
Record lookup(Phone*const);//重复声明了Record lookup(Phone*)

在这两组函数声明中,每一组的第二个声明和第一个声明是等价的。另一方面,如果形参是某种类型的指针或引用,则通过区分其指向的是常量对象还是非常量对象可以实现函数重载,此时的const是底层的:

//对于接受引用或指针的函数来说,对象是常量还是非常量对应的形参不同
//定义了4个独立的重载函数Record lookup(Account&);//函敏作用于Account的引用
Record lookup(const Account&);//新函数,作用于常量引用
Record lookup(Account*);//新函数,作用于指向Account的指针
Record lookup(const Account*);//新函数,作用于指向常量的指针

在上面的例子中,编译器可以通过实参是否是常量来推断应该调用哪个函数。因为const不能转换成其他类型,所以我们只能把const对象(或指向const的指针传递给const形参。相反的,因为非常量可以转换成const,所以上面的4个函数都能作用于非常量对象或者指向非常量对象的指针。不过将要介绍的,当我们传递一个非常量对象或者指向非常量对象的指针时,编详器会优先选用非常量版本的函数。

建议:何时不应该重载函数

尽管函数重载能在一定程度上减轻我们为函数起名字的负担,但是最好只重载那些确实非常相似的操作。有些情况下,给函数起不同的名字能使得程序更易理解。举个例子,下面是儿个负责移动屏幕光标的函数:

Screen& moveHome();
Screen& moveAbs(int,int);
Screen& moveRel(int,int,string,direction);

乍看上去,似乎可以把这组函数统一命名为move:从而实现函数的重载;

Screen& move();
Screen& move(int,int);
Screen& move(int,int,string directionj;

其实不然,重载之后这些函数失去了名字中本来拥有的信息。尽管这些函数确实都是在移动光标,但是具体移动的方式却各不相同。以moveHome为例,它表示是移动光标的一种特殊实例。一般来说,是否重载函数要看那个更容易理解:

// 哪种形式更容易理解呢?

myScreen.moveHome();// 我们认为应该是这个

myScreen.move();

const_cast和重载

const_cast在重载函数的情景中最有用。举个例子:

//比较两个string对象的长度,返回较短的那个引用
const string&shorterString(const string&s1,const string &s2)
{return s1.slze()<=s2.size()?s1:s2;
}

这个函数的参数和返回类型都是const string的引用。我们可以对两个非常量的string实参调用这个函数,但返回的结果仍然是const string的引用。因此我们需要一种新的shorterString函数,当它的实参不是常量时,得到的结果是一个普通的引用,使用const_cast可以做到这一点:

string& shorterString(string&s1,string&s2)
{auto&r=shorterString(const_cast<const string&>(s1),const_cast<const stringg&>(s2));return const_cast<string&>(r);
}

在这个版本的函数中,首先将它的实参强制转换成对const的引用,然后调用了shorterString函数的const版本。const版本返回对const string的引用,这个引用事实上绑定在了某个初始的非常量实参上。因此,我们可以再将其转换回一个普通的stringg,这显然是安全的。

调用重载的函数

定义了一组重载函数后,我们需要以合理的实参调用它们。函数匹配(function matching)是指一个过程,在这个过程中我们把函数调用与一组重载函数中的某一个关联起来,函数匹配也叫做重载确定(overload resolution)。编译器首先将调用的实参与重载集合中每一个函数的形参进行比较,然后根据比较的结果决定到底调用哪个函数。

在很多(可能是大多数)情况下,程序员很容易判断某次调用是否合法,以及当调用合法时应该调用哪个函数。通常,重载集中的函数区别明显,它们要不然是参数的数量不同,要不就是参数类型毫无关系。此时,确定调用哪个函数比较容易。但是在另外一些情况下要想选择函数就比较困难了,比如当两个重载函数参数数量相同且参数类型可以相互转换时。

现在我们需要掌握的是,当调用重载函数时有三种可能的结果:

  • 编详器找到一个与实参最佳匹配(best match)的函数,并生成调用该函数的代码。
  • 找不到任何一个函数与调用的实参匹配,此时编译器发出无匹配(nomatch)的错误信息。
  • 有多于一个函数可以匹配,但是每一个都不是明显的最佳选择.此时也将发生错误, 称为二义性调用(ambiguous call)。

重栽与作用域

一般来说,将函数声明置于局部作用域内不是一个明智的选择。但是为了说明作用域和重载的相互关系,我们将暂时违反这一原则而使用局部函数声明

对于刚接触C++的程序员来说,不太容易理清作用域和重载的关系。其实,重载对作用域的一般性质并没有什么改变:如果我们在内层作用域中声明名字,它将隐藏外层作用域中声明的同名实体。在不同的作用域中无法重载函数名:

string read();
void print(const string&);
void print(double);//重载print函数
void fooBar(int ival)
{bool read=false;//新作用域:隐藏了外层的readstrings=read();//错误:read是一个布尔值,而非函数//不好的习惯:通常来说,在局部作用域中声明函数不是一个好的选择void print(int);//新作用域:隐藏了之前的printprint("value:");//错误:print(const stringg)被隐藏拍了print(ival); //正确:当前print(int)可见print(3.14); //正确:调用pritnt(int);Print(double)被隐藏拍了
}大多数读者都能理解调用read函数会引发错误.因为当编译器处理调用read的请求时,找到的是定义在局部作用域中的read。这个名字是个布尔变量,而我们显然无法调用一个布尔值,因此该语句非法。调用print函数的过程非常相似。在fooBar内声明的print(int)隐藏了之前两个print函数,因此只有一个pxint函数是可用的:该函数以int值作为参数。当我们调用print函数时,编译器首先寻找对该函数名的声明,找到的是接受int值的那个局部声明。一旦在当前作用域中找到了所需的名字,编译器就会忽略掉外层作用域中的同名实体。剩下的工作就是检查函数调用是否有效了。在C++语言中,名字查找发生在类型检查之前。第一个调用传入一个字符串字面值,但是当前作用域内print函数唯一的声明要求参数是int类型。字符串字面值无法转换成int类型,所以这个调用是错误的。在外层作用域中的print(const string&)函数虽然与本次调用匹配,但是它已经被隐藏掉了,根本不会被考虑。当我们为print函数传入一个double类型的值时,重复上述过程。编译器在当前作用域内发现了print(int)函数,double类型的实参转换成int类型,因此调用是合法的。假设我们把print(int)和其他print函数声明放在同一个作用域中,则它将成为另一种重载形式。此时,因为编诉器能看到所有三个函数,上述调用的处理结果将完全不同:```cpp
void print(const string&);
void print(double);//print函数的重载形式
void print(int);//print函数的另一种重载形式
void fooBar2(int ival)
{print("value:"); //调用print(const string&)print(ival);//调用print(int)print(3.14);//调用print(double)
}

相关文章:

C++ Primer 函数重载

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

10bit VS 8bit 视频:色彩深度的较量,谁才是视觉盛宴的王者?

10bit 和 8bit 视频 10bit 视频和 8bit 视频的主要区别在于色彩深度和细节表现能力。10bit 视频具有更高的色彩深度和更丰富的细节表现,能够提供更平滑的色彩过渡和更真实的图像质量,但需要更多的存储空间和带宽。8bit 视频则在存储和传输方面更加高效,适合于对存储空间和带…...

从零开始-将小爱接入大模型

文章目录 前言一、学习教程二、docker安装二、项目下载和配置三、文件修改文件.env.exampledeepseek模型 注册gitee并获取密钥 文件.migpt.example.js连接小爱同学 三、运行项目创建目录启动docker容器 总结 前言 基于当前人工智能的发展&#xff0c;大模型使用越来越方便&…...

关于 IoT DC3 中设备(Device)的理解

在物联网系统中&#xff0c;设备&#xff08;Device&#xff09;是一个非常宽泛的概念&#xff0c;它可以指代任何能够接入系统并进行数据交互的实体。包括但不限于手机、电脑、服务器、网关、硬件设备甚至是某些软件程序等所有能接入到该平台的媒介。 内容 定义 目的 示例 …...

北斗导航 | 周跳探测算法(matlab源码)

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 周跳 1. 高次差法2. 相位减伪距法3. TurboEdit算法(MW+GF组合)4. 多项…...

Centos搭建python环境

在 CentOS 上配置 Python 环境可以通过以下步骤完成&#xff1a; 1. 检查系统自带 Python 版本 CentOS 7/8 可能已经自带了 Python&#xff1a; python3 --version 如果没有&#xff0c;或者版本过低&#xff0c;可以手动安装。 2. 安装 Python&#xff08;推荐&#xff0…...

Python 字典思维导图

在本章中&#xff0c;你将学习能够将相关信息关联起来的Python字典。你将学习如何访问和修改字典中的信息。鉴于字典可存储的信息量几乎不受限制&#xff0c;因此我们会演示如何遍 历字典中的数据。另外&#xff0c;你还将学习存储字典的列表、存储列表的字典和存储字典的字典。…...

springboot与springcloud对应版本

Spring Boot 与 Spring Cloud Alibaba 版本对应关系 请根据您使用的 Spring Boot 版本&#xff0c;选择兼容的 Spring Cloud Alibaba 版本&#xff1a; Spring Boot Version Spring Cloud Alibaba Version Spring Cloud Version 3.0.2 2022.0.0.0 Spring Cloud 2022.0.0 3.0.2…...

verilog程序设计及SystemVerilog验证

1.Verilog测试程序设计基础 1.1Testbench及其结构 在仿真的时候Testbench用来产生测试激励给待验证设计( Design Under Verification, DUV)&#xff0c;或者称为待测设计(Design UnderTest, DUT) 。 测试程序的一般结构&#xff1a; Testbench是一个测试平台&#xff0c;信号…...

游戏引擎学习第104天

Z轴有点悬而未决 我们正在进行渲染器相关的工作。之前我们已经完成了法线贴图的代码&#xff0c;虽然基本完成&#xff0c;但还有一些与光照相关的工作待完成。目前&#xff0c;天空和地面部分的光照处理已经相对正常&#xff0c;但局部光源的处理还没有做好。 为了进行光照部…...

‌OpenAI GPT-4.5技术详解与未来展望

一、GPT-4.5的技术突破‌ OpenAI在人工智能领域的持续创新再次引领了技术潮流。近期,OpenAI内部已经成功实现了GPT-4.5的开发,这一版本相较于前代在多个方面实现了显著的技术突破‌。 GPT-4.5在算法优化和数据处理上进行了多项创新,使得模型在对自然语言的理解上,尤其是在…...

【科技革命】颠覆性力量与社会伦理的再平衡

目录 2025年科技革命&#xff1a;颠覆性力量与社会伦理的再平衡目录技术突破全景图认知智能的范式转移量子霸权实现路径生物编程技术革命能源结构重构工程 产业生态链重构医疗健康新范式教育系统智能进化金融基础设施变革制造范式革命 科技伦理与文明演进 2025年科技革命&#…...

好好说话:深度学习扫盲

大创项目是和目标检测算法YOLO相关的&#xff0c;浅浅了解了一些有关深度学习的知识。在这里根据本人的理解做一些梳理。 深度学习是什么&#xff1f; 之前经常听到AI&#xff0c;机器学习&#xff0c;深度学习这三个概念&#xff0c;但是对于三者的区别一直很模糊。 AI&…...

一款基于若依的wms系统

Wms-Ruoyi-仓库库存管理 若依wms是一套基于若依的wms仓库管理系统&#xff0c;支持lodop和网页打印入库单、出库单。毫无保留给个人及企业免费使用。 前端采用Vue、Element UI。后端采用Spring Boot、Spring Security、Redis & Jwt。权限认证使用Jwt&#xff0c;支持多终…...

【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析⑥】

ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase06 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月14日 关键词&#xff1a;UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023 TC10-006测试用例 用例ID测试场景验证要点参考条款预期…...

img标签的title和alt

img标签的title和alt 显示上 title:鼠标移入到图片上时候显示的内容&#xff1b; alt:图片无法加载时候显示的内容; <div class"box"><div><!-- title --><h3>title</h3><img src"./image/poster.jpg" title"这是封…...

redis cluster测试

集群节点信息这时候停掉一个master 172.30.60.31 从集群信息集中我们可以看到172.30.60.31的slave是172.30.60.41&#xff0c;查看41的日志&#xff0c;发现他成为了新的master 这时候我们在将172.30.60.41也杀死&#xff0c;会发现集群异常了 尝试把172.30.60.31启动&#xff…...

harmonyOS的文件的增、删、读、写相关操作(fs/content)

注意: 操作harmonyOS的文件只能对app沙箱内的文件进行操作 牵扯到两个支持点: fs和content这两个API; 具体的操作方法看下图: 创建文件 //js 引入 import fs from "ohos.files.fs" import featureAbility from "ohos.ability.featureAbility"; // 上下…...

12. Function Call实践

本文主要讲解大模型的function call能力&#xff0c;包括使用国内外在线模型和本地模型&#xff0c;以及如何微调以增强大模型的function call能力。 回顾下大模型学习思路&#xff1a; 1. 环境准备 1.1 平台上【模型调试】中创建 2. 调用国内外大模型测试 2.1 调用GPT-4 代…...

随机生成多孔介质matlab程序

matlab生成随机分布纤维代码&#xff0c;用于后续模拟处理 资源文件列表 随机生成多孔介质matlab程序.pdf , 5821...

华为云kubernetes基于keda自动伸缩deployment副本(监听redis队列长度)

1 概述 KEDA&#xff08;Kubernetes-based Event-Driven Autoscaler&#xff0c;网址是https://keda.sh&#xff09;是在 Kubernetes 中事件驱动的弹性伸缩器&#xff0c;功能非常强大。不仅支持根据基础的CPU和内存指标进行伸缩&#xff0c;还支持根据各种消息队列中的长度、…...

是时候说再见了

说再见 2018 to 2025 2018&#xff1a;学习 2018年开始读研。师兄师姐们说可以写写CSDN博客&#xff0c;对找工作也有帮助。于是在12月4日&#xff0c;发布了自己的第一篇文章[翻译] 神经网络与深度学习 首页 - Index。当时还在学习各种基础知识&#xff0c;看到了这个英文文…...

数据结构与算法-栈与队列的应用递归表达式求值

参考学习&#xff1a;B站-逊哥带你学编程 栈与队列的应用 题1&#xff1a; 答案&#xff1a;B 题2&#xff1a; 答案&#xff1a;C 题3&#xff1a; 答案&#xff1a;D 题4&#xff1a; 答案&#xff1a;C 题5&#xff1a; 答案&#xff1a;B 题6&#xff1a; 答案&…...

vue3.x 的shallowReactive 与 shallowRef 详细解读

在 Vue 3.x 中&#xff0c;shallowReactive 和 shallowRef 是两个用于创建浅层响应式数据的 API。它们与 reactive 和 ref 类似&#xff0c;但在处理嵌套对象时的行为有所不同。以下是它们的详细解读和示例。 1. shallowReactive 作用 shallowReactive 创建一个浅层响应式对…...

前缀和(Prefix Sum)算法笔记C++

前缀和(Prefix Sum)算法介绍 前缀和是一种预处理技术, 用于快速计算数组中任意子区间的元素之和. 它通过一次遍历创建一个辅助数组来存储从数组起始位置到当前索引位置所有元素的累加和, 从而使得后续查询操作的时间复杂度降低至 O ( 1 ) O(1) O(1). 定义 对于给定的数组 n…...

负载测试工具有哪些?

Apache JMeter Apache JMeter 是一款开源的性能测试工具&#xff0c;主要用于对 Web 应用程序进行功能、负载和压力测试。JMeter 支持多种协议和技术&#xff0c;包括 HTTP, HTTPS, FTP 和 WebSocket 等。通过模拟大量并发用户访问来评估应用程序的表现1。 jmeter -n -t testp…...

ROS进阶:使用URDF和Xacro构建差速轮式机器人模型

前言 本篇文章介绍的是ROS高效进阶内容&#xff0c;使用URDF 语言&#xff08;xml格式&#xff09;做一个差速轮式机器人模型&#xff0c;并使用URDF的增强版xacro&#xff0c;对机器人模型文件进行二次优化。 差速轮式机器人&#xff1a;两轮差速底盘由两个动力轮位于底盘左…...

windows编译使用gtest

下载&#xff1a; Release v1.12.1 google/googletest GitHub 编译&#xff1a; 编译源码中的CMakeLists.txt&#xff1a; 编译后生成的目录是BUILD: *(编译之前需要安装cmake: ) 关注下面这两个目录&#xff1a; 在vs中打开&#xff1a; 配置属性&#xff1a; 点击编译&a…...

C++编程,#include <iostream>详解,以及using namespace std;作用

在C编程中&#xff0c;#include <iostream> 是用来包含输入/输出流头文件的预处理指令。它允许程序使用标准的输入/输出对象如 std::cout 和 std::cin&#xff0c;以便与标准输入和输出流进行交互。这一头文件是编写输入输出操作时必不可少的部分。 讲到这里&#xff0c…...

【愚公系列】《Python网络爬虫从入门到精通》008-正则表达式基础

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...

Golang并发编程最佳实践:协程与通道

Golang并发编程最佳实践&#xff1a;协程与通道 本文旨在介绍Golang并发编程的最佳实践&#xff0c;重点讨论协程和通道的使用方法&#xff0c;以及相关的实际案例和代码示例。 一、Golang并发编程简介 又称Go语言&#xff09;是一种由Google开发的编程语言&#xff0c;旨在提供…...

neural_gcm模型进行气象预测教程

简介 NeuralGCM &#xff08;General circulation models&#xff09;是Google开发的一种新型的天气和气候模型&#xff0c;它结合了传统的物理建模与机器学习技术&#xff0c;相关论文于2024年发表在nature上。它既可以做短期的天气预报&#xff0c;也可以做长期的气候预测。…...

怎么让DeepSeek自动化写作文案

在数字化时代&#xff0c;内容创作已成为企业争夺用户注意力的核心竞争力。面对海量信息需求&#xff0c;企业往往面临内容创作效率低下、质量参差不齐、周期长等问题。如何用技术手段解决这些痛点&#xff0c;成为企业迫切需要破解的难题。今天&#xff0c;我们将以DeepSeek为…...

淘宝/天猫获得淘宝商品评论 API 返回值说明||API评论接口

item_review-获得淘宝商品评论 taobao.item_review 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,ite…...

全面理解-c++11的引用折叠

在 C 中&#xff0c;引用折叠&#xff08;Reference Collapsing&#xff09; 是一组用于处理多重引用&#xff08;如 T& & 或 T&& &&&#xff09;的规则&#xff0c;主要出现在模板参数推导、auto 类型推导和 decltype 的上下文中。它是实现**通用引用…...

考研高数复习规范

前言 这里记录我的高数复习规范与规划&#xff0c;希望能给需要考研的同学一点启发 规范原因 高数的内容很多&#xff0c;关键的是&#xff1a;会做题、拿高分首先最重要的就是抓住概念。比如有界无界的概念&#xff0c;间断点的概念、极限的概念其次是做题过程中得到的方法…...

2025 docker可视化管理面板DPanel的安装

1.什么是 DPanel &#xff1f; DPanel 是一款 Docker 可视化管理面板&#xff0c;旨在简化 Docker 容器、镜像和文件的管理。它提供了一系列功能&#xff0c;使用户能够更轻松地管理和部署 Docker 环境。 软件特点&#xff1a; 可视化管理&#xff1a;提供直观的用户界面&#…...

「vue3-element-admin」Vue3 + TypeScript 项目整合 Animate.css 动画效果实战指南

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 欢迎点赞 &#x1f44d; 收藏 ⭐评论 …...

Python函数进阶250215

函数返回值进阶 函数返回的内容也是地址 def func01():data [1, 2, 3]# 执行到此步后&#xff0c;[1, 2, 3]这块内存会有一个引用计数器&#xff0c;且值为2&#xff0c;因为内部的data与外部的v1都指向这块空间return data v1 func01()# v1 point the address of data, if…...

VMware Workstation Pro 下载(无需注册账号)

VMware Workstation Pro 目前对个人用户完全免费。有两种下载方式&#xff0c;分别为 1、Broadcom 官网下载 需要注册账号&#xff0c;我懒得注册 2、VMware 更新服务器下载 如果不想注册账号&#xff0c;可以通过 VMware 更新服务器直接下载。访问以下链接&#xff1a; ht…...

USB2.03.0摄像头区分UVC相机在linux中的常用命令

这里是引用 一. USB2.0 & 3.0接口支持区分 1.1. 颜色判断 USB接口的颜色并不是判断版本的可靠标准&#xff0c;但根据行业常见规范分析如下&#xff1a; USB接口颜色与版本对照表&#xff1a; 接口颜色常见版本内部触点数量传输速度黑色USB2.04触点480 Mbps (60 MB/s)白…...

Linux入侵检查流程

1. 初步信息收集 1.1 系统信息 • 目的&#xff1a;了解当前系统的基本情况&#xff0c;包括操作系统版本、内核版本等。 • 命令&#xff1a; # 查看操作系统发行版信息 cat /etc/os-release # 查看内核版本 uname -r 1.2 网络信息 • 目的&#xff1a;查看网络连接状态、…...

(尚硅谷 Java 学习 B 站大学版)Day17 多态练习

Instanceof 关键字 一&#xff1a;引言 不能调用子类特有的方法、属性&#xff1b; 如何才能调用子类特有的属性和方法 向下转型&#xff1a;使用强制类型转换符 Man m1(Man) p2 注&#xff1a;其中p2 为 Person 类型 使用强转时&#xff0c;可能出现 ClassCastException …...

vscode配置django环境并创建django项目(全图文操作)

文章目录 创建项目工作路径下载python插件&#xff1a;创建虚拟环境 1. 命令方式创建2. 图文方式创建 在虚拟环境中安装Django创建Django项目安装Django插件选择虚拟环境 创建项目工作路径 输入 code . 下载python插件&#xff1a; 创建虚拟环境 1. 命令方式创建 切换在工作…...

NLP 八股 DAY1:BERT

BERT全称&#xff1a;Pre-training of deep bidirectional transformers for language understanding&#xff0c;即深度双向Transformer。 模型训练时的两个任务是预测句⼦中被掩盖的词以及判断输⼊的两个句⼦是不是上下句。在预训练 好的BERT模型后⾯根据特定任务加上相应的⽹…...

53倍性能提升!TiDB 全局索引如何优化分区表查询?

作者&#xff1a; Defined2014 原文来源&#xff1a; https://tidb.net/blog/7077577f 什么是 TiDB 全局索引 在 TiDB 中&#xff0c;全局索引是一种定义在分区表上的索引类型&#xff0c;它允许索引分区与表分区之间建立一对多的映射关系&#xff0c;即一个索引分区可以对…...

基于单片机的常规肺活量SVC简单计算

常规肺活量 SVC&#xff08;Slow Vital Capacity&#xff09;是指尽力吸气后缓慢而又完全呼出的最大气量。 成年男性的肺活量通常在 3500-4000ml 之间&#xff0c;成年女性的肺活量通常在 2500-3000ml 之间。 单片机一般通过外接流量传感器&#xff0c;使用ADC高速采集的方式…...

html 点击弹出视频弹窗

一、效果: 点击视频按钮后,弹出弹窗 播放视频 二、代码 <div class="index_change_video" data-video-src="</...

机器学习:二分类和多分类

1. 二分类(Binary Classification) 定义 二分类是指将输入样本分成两个互斥的类别。例如: 邮件 spam 或不是 spam。病人是有病或健康。物品是正品或假货。实现方法 二分类任务可以通过多种算法实现,包括: 逻辑回归(Logistic Regression):通过sigmoid函数将输出值映射…...

Win11配置wsl、ubuntu、docker

系统要求 安装WSL。 开通虚拟化&#xff1a; 准备工作 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartdism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestartwsl --set-default-versi…...