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

【C++】初识C++之C语言加入光荣的进化(上)

写在前面

本篇笔记作为C++的开篇笔记,主要是讲解C++关键字(C++98)连带一点点(C++11)的知识。掌握的C++新语法新特性,当然C++是兼容C的,我们学习C的那套在C++中也是受用。


文章目录

  • 写在前面
  • 一、命名空间域
    • 1.1、命名空间域的定义与使用
    • 1.2、命名空间域的细节
  • 二、 C++的输入/输出
    • 2.2、关于std命名空间的使用惯例
  • 三、缺省参数
  • 四、函数重载
    • 4.1、深入了解C++的重载机制
  • 五、C++98关键字


一、命名空间域

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。

在这里插入图片描述
我们在全局中定义一个变量rand,但是rand函数在stdllib.h库中已经定义,根据我们学习过的程序的程序编译与链接笔记提到过,在连接中出现相同的变量符号表合并时会报错。
在这里插入图片描述
为了避免这种情况C++推出了新的关键字namespace,命名空间域。这样在全局中,我们就保护了我们自己定义的rand变量。在这里插入图片描述

1.1、命名空间域的定义与使用

定义命名空间,需要使用到 namespace关键字,后面跟命名空间的名字,然后接一对{} 即可,{}中即为命名空间的成员。
在这里插入图片描述

这时候我们运行程序,发现打印结果并不是我们自己创建的全局变量rand,如下图
在这里插入图片描述
这是因为被命名空间域保护起来的变量外界不能直接访问

命名空间的使用有三种方式:

  • 加命名空间名称及作用域限定符( :: )
namespace Bucai {int rand = 10;int k = 20;
}
int main()
{printf("%d\n", Bucai::k);return 0;
}
  • 使用using将命名空间中某个成员引入
namespace Bucai {int rand = 10;int k = 20;
}
using Bucai::k;
int main()
{printf("%d\n", k);return 0;
}
  • 使用using namespace 命名空间名称 引入
    这个效果是暴露命名空间域的内容,让外部可以直接访问。但是这和直接全局中定义变量的效果是不一样的,因为在命名空间域中有标识,在编译连接中形成的符号表不会与在全局变量中定义的吻合
#include <stdio.h>
#include <stdlib.h>namespace Bucai {int rand = 10;int k = 20;
}using namespace Bucai;int main()
{printf("%d\n", k);return 0;
}

但是需要注意的是,如果在上面代码中,我们直接使用rand会,程序会报错,如下图在这里插入图片描述
报出错误是rand不明确符号,不再是之前的重定义,所以我们使用using namespace命名空间名称引入,需要留意直接引入后的结果。


1.2、命名空间域的细节

命名空间域也是域,它与作用域的细节是相似的,代码块就是作用域的一种表现形式,我们使用代码块理解命名空间域会更好,在代码块中,我们定义的变量等与外界是互不干涉的,而且在代码块中我们使用对应的变量采用的是就近原则,而且在代码块中可以嵌套代码块,在代码块外面访问不了代码块的内容,因为在代码块中的内容出了代码块作用域就结束。

命名空间域我们可以理解为一个有名称的代码块。必须定义在全局中的"代码块",在域中可以随意的定义变量,这样外界不会与域中变量命有冲突,当我们想要使用域中变量时,可以通过域名+作用域限定符来完成引用

命名空间域细节:

  1. 命名空间中可以定义变量/函数/自定义类型/类
namespace Bucai {int rand = 10;int k = 20;int Add(int left, int right){return left + right;}class MyName {public:int age = 18;};
}
  1. 命名空间可以嵌套
namespace Bucai {int k = 0;namespace bbbb {int age = 18;}
}
  1. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

二、 C++的输入/输出

C++兼容C,自然是支持C的标准输入输出的,但是C的标准输入输出有点麻烦,每次都需要程序猿手动标识这个变量是上面类型,需要使用%什么来进行输出,很麻烦,所以C++推出了一个全新玩法。

#include<iostream>
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;//在平时练习中我们可以直接展开std命名空间域
int main()
{cout << "Hello world" << endl;return 0;
}

说明:

  1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含<iostream>头文件以及按命名空间使用方法使用 std
  2. coutcin是全局的流对象endl是特殊的C++符号,表示换行输出(即C中的\n),他们都包含在包含<iostream>头文件中。
  3. <<是流插入运算符,>>是流提取运算符
  4. 使用C++输入输出更方便不需要printf/scanf输入输出时那样,需要手动控制格式C++输入输出可以自动识别变量类型
  5. 实际上coutcin分别是ostreamistream类型的对象,>><<也涉及运算符重载等知识。后面不才专门写一篇笔记来讲解IO流用法及原理。
  6. C++中为了兼容C语言,在C++ 使用流输入输出时需要检查C语言的输入输出,从原理的角度说,C++ 的输入输出效率是比C语言的输入输出要低的

注意: 早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;旧编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用<iostream>+std的方式来使用。
在这里插入图片描述

#include <iostream>
using namespace std;
int main()
{int a;double b;char c;// 可以自动识别变量的类型cin >> a;cin >> b >> c;cout << endl << a << endl;cout << b << "  " << c<< "  " << 12.888 << endl;return 0;
}

测试运行结果:
在这里插入图片描述


2.2、关于std命名空间的使用惯例

std是C++标准库的命名空间

  1. 日常练习中,建议直接using namespace std即可,这样就很方便。
  2. 项目开发中,using namespace std展开,标准库就全部暴露出来了,但是项目开发中代码较多、规模大,就很容易出现冲突问题。所以建议在项目开发中使用,像std::cout这样使用是 指定命名空间 + using std::cout展开常用的库对象/类型等方式

三、缺省参数

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

在这里插入图片描述

void Func(int a = 20)
{cout << a << endl;
}
int main()
{Func();		// 没有传参时,使用参数的默认值Func(10);	// 传参时,使用指定的实参return 0;
}

测试运行结果:
在这里插入图片描述
在上结果图中,我们也可以看出在函数定义中,我们设计了一个形参,但是形参给了一个缺省值20,在我们调用函数时,我们没有给形参a传递实参时,a就使用缺省值,所以打印20,在我们有传递实参时,形参就接收实参参数,缺省值就失效了,所以打印10

缺省参数类型:

  • 全缺省参数
void Func(int a = 10, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;
}
  • 半缺省参数
    • 半缺省参数必须从右往左依次来给出,不能间隔着给
    • 缺省参数不能函数声明和定义同时出现,如果函数声明和定义分开,缺省参数需要在声明中指定
    • 缺省值必须是常量或者全局变量
    • C语言不支持(编译器不支持)
void Func(int a, int b = 10, int c = 20)//从右往左依次指定缺省值
{cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;
}

传参时编译器读取实参是从左往右读取的,如果不是右往左指定缺省值,那么在实参传递时,会出现程序猿意想之外的错误,所以编译器会检查缺省值的给定,若出现缺省值的指定不是从右往左,则报错,如下图。
在这里插入图片描述
函数声明与定义分开的工程中,如果我们把缺省值放在定义中会出现报错:如下程序

//test.h
void Func(int a, int b, int c);//tect.c
#include "test.h"
void Func(int a = 10, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;
}//main.c
#include "test.h"
int main() {Func();return 0;
}

测试结果:在这里插入图片描述
程序编译与链接笔记中,我们已经知道#include引用的头文件,最后都是拷贝头文件内容到当前文件下的。
test.h头文件中,我们只声明了没有缺省值的Func函数,在编译阶段拷贝到工程中,就不是有缺省值的函数,所以报错。


四、函数重载

自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。
比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“谁也赢不了!”,后者是“谁也赢不了!”。

谁也赢不了虽然是一样的字,但是意思完全不一样,这就形成了重载,同理,C++中也做出了相似的函数重载。

函数重载: 是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数要求这些同名函数形参列表 (参数个数类型类型顺序) 不同,常用来处理实现功能类似数据类型不同的问题。

在这里插入图片描述
我们设计一个交换函数,用来交换变量值:

void Swap(int* a, int* b) {  int num = *a;*a = *b;*b = num;
}
void Swap(double *a, double *b) {double num = *a;*a = *b;*b = num;
}int main() {int a = 10, b = 20;Swap(&a, &b);cout << "a = " << a << " b = " << b << endl;double c = 10.12, d = 20.12;Swap(&c, &d);cout << "c = " << c << " d = " << d << endl;return 0;
}

运行结果:
在这里插入图片描述
这样我们就完成了不同类型的变量交换,Swap函数形成了重载,这时C++编译器特有的属性

构成重载的三大要素:

  1. 形参个数不同
  2. 形参类型顺序不同
  3. 形参类型不同

注意:函数的返回值不同是不构成函数重载的!!


4.1、深入了解C++的重载机制

在深入了解之前,我们先认识一下C语言为什么不支持重载,但在此之前我们需要清楚C/C++的程序编译与链接,因为重载机制核心是发生在编译阶段完成的。

在C语言中,我们根据不才写的程序编译与链接笔记可以知道,在程序在经过编译后我们的函数符号名是不会有改变的。我们以下程序为例:

#include <stdio.h>void Swap(int* a, int* b) {  int num = *a;*a = *b;*b = num;
}int main(){int a = 10;int b = 20;Swap( &a,&b);printf("%d \n",a);return 0;
}

我们在Linux环境下查看上面C语言生成的符号表(如下图)
在这里插入图片描述
在上图中,可以清晰看出在C语言中函数符号名有且只有一个,这样就导致了C语言的编译器不支持重载,而C++推出了全新玩法把编译后的函数符号名更改为另一种形式函数符号名,让其实现函数的重载

在Windows环境下,函数命名太过复杂,不才这里使用 g++编译器

我们以上面代码为例:

#include <stdio.h>void Swap(int* a, int* b) {  int num = *a;*a = *b;*b = num;
}int main(){int a = 10;int b = 20;Swap( &a,&b);printf("%d \n",a);return 0;
}

我们在Linux环境下,查看由g++编译器编译后所形成的符号表查看函数符号名的变化,如下图。
在这里插入图片描述
此时C++中的函数,已经不再是单纯的Swap,而是在Swap前后增加了新东西。那一前一后的东西需要查看对应编译器的命名规则,如下。

C++的函数符号名命名规则:

  • 每个编译器都有自己的函数名修饰规则
  • g++编译器中的函数修饰后变成【_Z+函数长度+函数名+类型首字母
  • Windows下名字修饰规则在这里插入图片描述

根据命名规则我们可以得出交换函数Swap在C++形成_Z4SwapPiS_代表着:

  • _Z:固定开头
  • 4:代表着函数名字的长度,Swap长度4个字符,所以是4
  • Swap:代表了函数名
  • Pi:代表了int*类型的首字母合体,P代表是指针,i代表是整形。

在这里插入图片描述

void f(int a, char b)
{cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{cout << "f(char b, int a)" << endl;
}
void f(int a, double b, char c) {cout << "f(int a, double b, char c)" << endl;}
int main()
{f(10, 'a');f('a', 10);f(10, 2.5, 'a');return 0;
}

我们使用g++编译器,生成符号表查看上面函数f的符号名,如下图
在这里插入图片描述
第一个函数f:后面的类型是ic,对应形参中的intchar
第二个函数f:后面的类型是ci,对应形参中的charint
第三个函数f:后面的类型是idc,对应形参中的intdoublechar

通过这里就理解了C语言没办法支持重载,因为同名函数没办法区分。而C++是通过函数修饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。

有此,我们可以总结出,函数的重载只会与形参列表 中的 参数个数类型类型顺序相关,因为只有这些才控制着函数符号名。当函数的符号名相同时,编译器在链接时候也是会区分不开,所以必须保证函数符号名唯一


五、C++98关键字

C++总计63个关键字(其中包含C语言32个关键字),如下表格

asmdoifreturntrycontinue
autodoubleinlineshorttypedeffor
booldynamic_castintsignedtypeidpublic
breakelselongsizeoftypenamethrow
caseenummutablestaticunionwchar_t
catchexplicitnamespacestatic_castunsigneddefault
charexportnewstructusingfriend
classexternoperatorswitchvirtualregister
constfalseprivatetemplatevoidtrue
const_castfloatprotectedthisvolatilewhile
deletegotoreinterpret_cast

ps:下级正在紧张制作中,欲知后事如何,请听下回分解

以上就是本章所有内容。若有勘误请私信不才。万分感激💖💖 如果对大家有用的话,就请多多为我点赞收藏吧~~~💖💖
请添加图片描述

ps:表情包来自网络,侵删🌹

相关文章:

【C++】初识C++之C语言加入光荣的进化(上)

写在前面 本篇笔记作为C的开篇笔记&#xff0c;主要是讲解C关键字(C98)连带一点点(C11)的知识。掌握的C新语法新特性&#xff0c;当然C是兼容C的&#xff0c;我们学习C的那套在C中也是受用。 文章目录 写在前面一、命名空间域1.1、命名空间域的定义与使用1.2、命名空间域的细节…...

Linux文件目录 --- 文件时间戳、atime、mtime、ctime、指定格式查看

三、文件时间戳 1. atime 文件最近被访问时间,是在读取文件或者执行文件时更改的,如果只cd进入一个目录然后cd . .不会引起atime的改变&#xff0c;要是使用ll命令进行查看后&#xff0c;再cd . . 离开就不同了。 2. mtime 文件最近内容修改时间&#xff0c;在目录中有文件…...

网页博客风格未完

实现类似的博客风格&#xff1a; 学习前端开发基础&#xff1a; HTML & CSS&#xff1a;掌握网页结构和样式设计的基础知识。JavaScript&#xff1a;增强网页的互动性和动态效果。响应式设计&#xff1a;确保您的博客在不同设备上都有良好的显示效果。 使用开源模板&#x…...

LeetCode 2545.根据第 K 场考试的分数排序:考察编程语言的排序

【LetMeFly】2545.根据第 K 场考试的分数排序&#xff1a;考察编程语言的排序 力扣题目链接&#xff1a;https://leetcode.cn/problems/sort-the-students-by-their-kth-score/ 班里有 m 位学生&#xff0c;共计划组织 n 场考试。给你一个下标从 0 开始、大小为 m x n 的整数…...

软考:系统架构设计师教材笔记(持续更新中)

教材中的知识点都会在。其实就是将教材中的废话删除&#xff0c;语言精练一下&#xff0c;内容比较多&#xff0c;没有标注重点 系统架构概述 定义 系统是指完成某一特定功能或一组功能所需要的组件集&#xff0c;而系统架构则是对所有组件的高层次结构表示&#xff0c;包括各…...

安卓环境配置及打开新项目教程,2024年12月20日最新版

1.去官网下载最新的Android Studio&#xff0c;网址&#xff1a;https://developer.android.com/studio?hlzh-cn 2.下载加速器&#xff0c;注册账号&#xff0c;开启加速器。网址&#xff1a;放在文末。 3.下载安卓代码&#xff0c;项目的路径上不能有中文&#xff0c;特别是…...

基于Spring Boot的电影售票系统

一、系统概述 该系统采用Spring Boot框架开发&#xff0c;充分利用其简化配置、快速部署和生产级别的性能监控等特点&#xff0c;为电影售票业务提供高效、可靠的技术支持。同时&#xff0c;系统采用前后端分离架构&#xff0c;前端使用Vue.js等框架&#xff0c;后端使用Sprin…...

【linux】 unshare -user -r /bin/bash命令详解

命令解析 unshare -user -r /bin/bash 是一个 Linux 命令&#xff0c;它用于在新的用户命名空间中运行一个进程&#xff08;在这个例子中是 /bin/bash&#xff09;。以下是这个命令的详细解释&#xff1a; 【1. 命令解析】 unshare: unshare 是一个工具&#xff0c;用于从调用…...

uniappX 移动端单行/多行文字隐藏显示省略号

在手机端不能多行省略使用 -webkit-line-clamp 属性所以移动端多行省略不会生效改为 lines 属性即可 /**单行文本溢出显示省略号*/ .text-ov1 {white-space: nowrap;overflow: hidden;text-overflow: ellipsis;height: auto; } /**APP多行文本溢出显示省略号*/ // #ifdef APP-…...

uniApp打包H5发布到服务器(docker)

使用docker部署uniApp打包后的H5项目记录&#xff0c;好像和VUE项目打包没什么区别... 用HX打开项目&#xff0c;首先调整manifest.json文件 开始用HX打包 填服务器域名和端口号~ 打包完成后可以看到控制台信息 我们可以在web文件夹下拿到下面打包好的静态文件 用FinalShell或…...

谷歌Gemini与Anthropic Claude对比测试引发争议:AI竞赛暗流涌动

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

RAF认证的具体内容是什么?

RAF认证 Responsible Animal Fiber RAF认证&#xff0c;负责任动物纤维标准&#xff0c;是一个致力于确保动物福利、环境可持续性以及产品质量合规性的透明、可追溯和可信赖的认证体系。该体系不仅涵盖了动物纤维的生产和加工环节&#xff0c;还注重从源头到最终产品的整个供应…...

《OpenCV计算机视觉》-对图片的各种操作(均值、方框、高斯、中值滤波处理)及形态学处理

文章目录 《OpenCV计算机视觉》-对图片的各种操作&#xff08;均值、方框、高斯、中值滤波处理&#xff09;边界填充阈值处理图像平滑处理生成椒盐图片均值滤波处理方框滤波处理高斯滤波处理中值滤波处理 图像形态学腐蚀膨胀开运算闭运算顶帽和黑帽 《OpenCV计算机视觉》-对图片…...

Java字符串的|分隔符转List实现方案

字符串处理 问题背景代码实现代码优化原因分析实现方案 注意事项异常处理Maven未识别异常 问题背景 在项目组对账流程中&#xff0c;接收对方系统的对账文件&#xff0c;数据以|为分隔符&#xff0c;读取文件内容&#xff0c;分条入库。 代码实现 Java中将字符串转给list&am…...

【机器学习】当教育遇上机器学习:打破传统,开启因材施教新时代

我的个人主页 我的领域&#xff1a;人工智能篇&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;&#x1f44d;点赞 收藏❤ 教育是人类社会发展的基石&#xff0c;然而传统教育模式往往难以满足每个学生的个性化需求。随着机器学习技术的兴起&#xff0c;教…...

【FastAPI】日志

一、概述 FastAPI 是一个现代的、快速&#xff08;高性能&#xff09;的Web框架&#xff0c;用于构建API&#xff0c;基于Python类型提示。 日志记录是任何应用程序中不可或缺的一部分&#xff0c;它允许开发者追踪事件的发生、识别错误并了解系统的运行状态。 在 FastAPI 中&…...

faiss库中ivf-sq(ScalarQuantizer,标量量化)代码解读-7

流程 代码 void IndexIVF::search(idx_t n,const float* x,idx_t k,float* distances,idx_t* labels,const SearchParameters* params_in) const {FAISS_THROW_IF_NOT(k > 0);const IVFSearchParameters* params nullptr;if (params_in) {params dynamic_cast<const I…...

ORA-65198 PDB clone 时 不能新加datafile 以及hang的一个原因

create pluggable database XX from SS keystore identified by "YYY" parallel 32 service_name_convert( _srv, _srv); 20TB 4小时 update /* rule */ undo$ set name:2,file#:3,block#:4,status$:5,user#:6,undosqn:7,xactsqn:8,scnbas:9,scnwrp:10,inst#:11,…...

大秦朝历史

大秦朝是中国历史上一个虚构的朝代&#xff0c;通常被认为是秦朝的后继者。根据一些历史小说和影视作品的描述&#xff0c;大秦朝被描绘为一个强大的中央集权国家&#xff0c;统一了整个中国。大秦朝的帝王被描述为英明神武&#xff0c;开创了繁荣富强的盛世。 根据这些虚构的…...

docker部署工业操作系统基础环境手册

在 Docker 上安装最新的 TDengine 数据库并将数据文件和配置文件映射到宿主机&#xff0c;可以按照以下步骤操作&#xff1a; 一、Tdengine 篇章 1. 拉取最新的 TDengine 镜像 首先&#xff0c;确保你的 Docker 环境已安装并运行。然后&#xff0c;使用以下命令拉取 TDengine…...

算法 class 003

二进制表示数 8位 有符号二进制位&#xff0c;能表示正数128位 &#xff0c;0 ~ 127(2的7次方减1) &#xff0c;能表示负数128位 &#xff0c;-1 ~ -128。 n 位有符号二进制位&#xff0c;一共能表示 2的n次放个数&#xff0c;正数为0 ~ (2的n-1次方) - 1&#xff08;再减1&…...

gcc和gcc -c区别

gcc 和 gcc -c 之间的主要区别在于编译过程的不同阶段以及最终生成的输出文件类型。理解这两者的区别对于有效地管理和构建项目非常重要。 ### gcc&#xff08;默认行为&#xff09; 当你使用 gcc 编译器而没有指定 -c 选项时&#xff0c;GCC 会执行整个编译链的所有步骤&…...

从一次线上故障聊聊接口自动化测试

1、背景 3月初&#xff0c;运营同事配置了个还未上线的页面到网站首页 banner&#xff0c;导致用户点了报错。尽管这次很明确是运营人为操作失误引起的故障&#xff0c;但过往此类核心页面的访问异常&#xff0c;我们已不是第一次遇见。 从平台整体利益触发&#xff0c;我们各…...

工业大数据分析算法实战-day15

文章目录 day15特定数据类型的算法工业分析中的数据预处理工况划分数据缺失时间数据不连续强噪声大惯性系统趋势项消除 day15 今天是第15天&#xff0c;昨日是针对最优化算法、规则推理算法、系统辨识算法进行了阐述&#xff0c;今日主要是针对其他算法中的特定数据类型的算法…...

QLocalServer本地进程通信发送数据丢失部分数据丢失解决方案

问题说明 Qt使用QLocalServer进行本地进程通信&#xff0c;发现数据随机丢失。例如&#xff0c;我需要连续发送7个数据&#xff0c;如果连续调用socket的write接口&#xff0c;会引起数据随机丢失&#xff0c;导致数据不完整。 解决方案 我这里的解决方案是&#xff0c;将7个…...

0.gitlab ubuntu20.04 部署问题解决

安装依赖&#xff1a; ① sudo apt-get update 出现&#xff1a; 解决方式&#xff1a; 去 /etc/apt/sources.list.d 这个目录删除或注释对应的list文件 第三方软件的源一般都以list文件的方式放在 /etc/apt/sources.list.d 这个目录 重新运行sudo apt-get update 安装…...

tomcat temp临时文件不清空,占用硬盘,jdk字体内存泄漏

JSP老旧项目迁移过来的代码&#xff0c;生成海报&#xff0c;会读取图片&#xff0c;读取字体文件&#xff0c;绘制图片&#xff0c;会生成大量临时文件&#xff0c;内存泄漏。 方案一&#xff0c;服务器定时删除temp临时文件夹 方案二&#xff0c;图片、字体改用静态类读取文件…...

元宇宙中的去中心化应用:Web3的未来角色

随着科技的快速发展&#xff0c;元宇宙已经成为了全球关注的焦点&#xff0c;成为一种新型的虚拟世界互动平台。与此同时&#xff0c;Web3作为新一代互联网技术&#xff0c;借助去中心化的理念&#xff0c;为元宇宙的发展提供了技术支撑。从虚拟互动到数字身份管理&#xff0c;…...

中关村科金智能客服机器人如何解决客户个性化需求与标准化服务之间的矛盾?

客户服务的个性化和标准化之间的矛盾一直是一个挑战。一方面&#xff0c;企业需要提供标准化的服务以保持运营效率和成本控制&#xff1b;另一方面&#xff0c;为了提升客户满意度和忠诚度&#xff0c;企业又必须满足客户的个性化需求。为此&#xff0c;中关村科金推出了智能客…...

【ROS2】坐标TF发布(动态)

1、创建目录 mkdir -p ~/ros/src/laoer_tf2、创建包 cd /home/laoer/ros/eg/src/cpp/laoer_tf ros2 pkg create --build-type ament_cmake laoer_tf \--dependencies rclcpp tf2_ros geometry_msgs \--license Apache-2.03、源码 3.1 TF消息TransformStamped 1)消息类型 …...

图解HTTP-HTTP状态码

状态码 状态码的职责是当客户端向服务器端发送请求时&#xff0c;描述返回的请求结果。 类别原因短语1XXInformational(信息状态码)接收的请求正在处理2XXSuccess&#xff08;成功状态码&#xff09;请求正常处理完毕4XXRedirection &#xff08;重定向状态码&#xff09;需要…...

SAP消息号 FD014 (抬头)没有指定国际标准货币代码 CNY

1、IDOC配置完成后&#xff0c; 2、业务下单-发货-开票&#xff08;2张&#xff09; 3、WE02 查看IDOC时发现 从报错看是货币代码设置问题。 4、解决&#xff1a; OY03 RMB和CNY同时勾选导致 RMB不勾选主要。...

GRUtopia:构建虚拟世界中的智能机器人社会

人工智能咨询培训老师叶梓 转载标明出处 人工智能讲师大模型讲师叶梓前沿技术分享&#xff1a;GRUtopia&#xff1a;构建虚拟世界中的智能机器人社会 随着Embodied AI&#xff08;具身智能&#xff09;领域的快速发展&#xff0c;对于能够在复杂环境中执行任务的机器人的需求日…...

华为:数字化转型只有“起点”,没有“终点”

上个月&#xff0c;我收到了一位朋友的私信&#xff0c;他询问我是否有关于华为数字化转型的资料。幸运的是&#xff0c;我手头正好收藏了一些&#xff0c;于是我便分享给他。 然后在昨天&#xff0c;他又再次联系我&#xff0c;并感慨&#xff1a;“如果当初我在进行企业数字…...

在开发嵌入式系统时,尤其是处理大数时,会遇到取值范围的问题。51单片机通常没有内建大整数支持,因此我们需要采用不同的方法来解决这一问题

00 两种可行方法分别是&#xff1a; 使用数组存储每一位数据并进行进位运算&#xff1a;通过将大数按位拆分成数组&#xff0c;然后实现逐位加法、进位等操作。使用符号变量进行计算&#xff1a;将数值分成低位和高位&#xff0c;分别用符号变量进行计算。 01&#xff1a;使用…...

STM32 与 AS608 指纹模块的调试与应用

前言 在嵌入式系统中&#xff0c;指纹识别作为一种生物识别技术&#xff0c;广泛应用于门禁系统、考勤机、智能锁等场景。本文将分享如何在 STM32F103C8T6 开发板上使用 AS608 指纹模块&#xff0c;实现指纹的录入和识别功能。 硬件准备 STM32F103C8T6 开发板AS608 指纹模块…...

腾讯PHP经典面试题(附答案)

腾讯PHP经典面试题&#xff08;附答案&#xff09; PHP开发工程师笔试试卷 姓名:PHP 一、PHP开发部分 1&#xff0e;合并两个数组有几种方式&#xff0c;试比较它们的异同 答&#xff1a; 1、array_merge() 2、’’ 3、array_merge_recursive array_merge 简单的合并数…...

LightGBM分类算法在医疗数据挖掘中的深度探索与应用创新(上)

一、引言 1.1 医疗数据挖掘的重要性与挑战 在当今数字化医疗时代,医疗数据呈爆炸式增长,这些数据蕴含着丰富的信息,对医疗决策具有极为重要的意义。通过对医疗数据的深入挖掘,可以发现潜在的疾病模式、治疗效果关联以及患者的健康风险因素,从而为精准医疗、个性化治疗方…...

【PCIe 总线及设备入门学习专栏 1.1 -- PCIe 基础知识 lane和link介绍】

文章目录 OverivewLane 和 LinkRC 和 RPPCIe controllerPCIE ControllerPHY模块 Inbound 和 OutboundPCIe transaction modelPIODMAP2P Overivew PCIe&#xff0c;即PCI-Express总线&#xff08;Peripheral Component Interconnect Express&#xff09;&#xff0c;是一种高速…...

PCDN 适合哪些人群?

家用宽带用户:对于家中有宽带&#xff0c;且宽带闲置时间较多的用户来说&#xff0c;PCDN是一个非常好的赚钱方式。只要你有足够的带宽和一台稳定的设备&#xff0c;就可以轻松参与。 小型网络运营者:如果你是小型网络运营者&#xff0c;拥有大量的闲置带宽资源PCDN 可以帮助你…...

C++之红黑树模拟实现

目录 红黑树的概念 红黑树的性质 红黑树的查找效率 红黑树的实现 红黑树的定义 红黑树节点的插入 红黑树的平衡调整 判断红黑树是否平衡 红黑树整体代码 测试代码 上期我们学习了AVL树的模拟实现&#xff0c;在此基础上&#xff0c;我们本期将学习另一个数据结构-…...

一分钟快速解读LEED绿色建筑认证

一分钟快速解读LEED绿色建筑认证——引领未来建筑绿色革命的风向标 LEED&#xff0c;全称为“Leadership in Energy and Environmental Design”&#xff0c;是美国绿色建筑委员会&#xff08;USGBC&#xff09;开发并推广的一套国际公认的绿色建筑评估体系。它如同一座灯塔&am…...

C# 语法糖集锦

文章目录 1、自动属性(Auto - Properties)2、对象和集合初始化器(Object and Collection Initializers)3、匿名类型(Anonymous Types)4、扩展方法(Extension Methods)5、Lambda 表达式(Lambda Expressions)6、空合并运算符(??)和空条件运算符(?.)7、隐式类型数…...

centos制作离线安装包

目录 1.yumdownloader与repotrack怎么选择&#xff1f; yumdownloader --resolve repotrack 总结 2.环境准备 3.安装 1.yumdownloader与repotrack怎么选择&#xff1f; yumdownloader --resolve 和 repotrack 都是与 YUM&#xff08;Yellowdog Updater Modified&#xf…...

HTML5 学习资源

HTML5 学习资源 学习HTML5的资源丰富多样&#xff0c;以下是一些推荐的在线教程、书籍和社区论坛&#xff0c;帮助你更好地掌握HTML5。 11.1 在线教程和课程 MDN Web Docs&#xff1a; MDN HTML 教程提供详细的HTML5文档和实例&#xff0c;适合各个水平的开发者。 W3Schools…...

大模型(LLM)提示工程(Prompt Engineering)初识

大模型提示工程&#xff08;Prompt Engineering&#xff09;是指设计和优化给定任务的输入提示&#xff0c;以便从大型语言模型&#xff08;如GPT-4、GPT-3等&#xff09;中获得最佳输出。其核心目标是通过合理设计输入内容&#xff08;提示词或提示结构&#xff09;&#xff0…...

uni-app 统一请求处理 请求拦截器 响应拦截器 请求封装

封装API接口 import {http} from ../utils/request.js export function login(code){return http({url:/wx/getSession,method: GET,data:{code}}) }调用接口 import {login,test,phoneMessage,updateAvatar} from ../../api/user.js function userLogin(){ login(code.value…...

web 渗透学习指南——初学者防入狱篇

目录 一、学习方向和基础知识二、知识点详细总结三、学习流程和典型案例 案例1&#xff1a;SQL注入漏洞检测与利用案例2&#xff1a;XSS攻击检测与利用案例3&#xff1a;文件上传漏洞利用案例4&#xff1a;CSRF攻击实现 四、常用工具推荐和使用方法五、初学者实用学习资源六、渗…...

卷积神经网络入门指南:从原理到实践

目录 1 CNN的发展历史 2 CNN的基本原理 3 CNN核心组件 3.1 卷积操作基础 3.2 卷积层详解 3.3 高级卷积操作 3.3.1 分组卷积&#xff08;Group Convolution&#xff09; 3.3.2 深度可分离卷积&#xff08;Depthwise Separable Convolution&#xff09;&#xff1a; 3.3 池…...

vscode添加全局宏定义

利用vscode编辑代码时&#xff0c;设置了禁用非活动区域着色后&#xff0c;在一些编译脚本中配置的宏又识别不了 遇到#ifdef包住的代码就会变暗色&#xff0c;想查看代码不是很方便。如下图&#xff1a; 一 解决&#xff1a; 在vscode中添加全局宏定义。 二 步骤&#xff1a…...