C++ 11(1):
C++11的发展史:
C++11中的{}:
看这个图片,我们的C++11是所有的对象都可以使用{}来进行初始化,之前我们的int类型的数据要使用赋值符号来进行初始化,现在的话我们可以直接使用花括号来进行,并且连赋值符号都可以去掉。
不光是内置类型的,自定义类型的也是可以的:
普通的括号,是我们之前调用构造函数初始化的方式。
之前我们讲过隐式类型转换有单参数的隐式类型转换和多参数的隐式类型转换。
我们看上面图片的第二行使用花括号初始化的方式这个就是我们的多参数的隐式类型转换。
第三行的只有一个参数没有花括号,这个就是单参数的隐式类型转换。
为什么我们可以只传一个参数,因为我们的Date日期类的构造函数的参数都是缺省参数。
我们传一个,后面的参数就可以使用缺省值代替;
我们的d1本质是构造+拷贝构造,拿后面的数据构造一个临时对象的日期类,然后拷贝构造给d1,但是经过编译器优化以后就是直接构造;
看上面,这种方式的使用场景,我们的vector里面存的是Date,我们push_back()数据,我们可以传有名对象进去,也可以传匿名对象进去,这两种的话,其实都比不上我们直接花括号进行多参数的隐式类型转换来得方便。
我们看上面这个图的d3,他的话,我们的C++11刚才说了就是所有的对象都可以使用{}来进行初始化,这个d3我们可以省略赋值符号,直接花括号就可以。
但是d2就不能去掉赋值符号了,因为他没有花括号,如果有花括号的话,其实是可以去掉赋值符号的,即便你是单参数也是可以的。
{2024, 7, 25}
这种大括号初始化形式创建了一个未命名的对象 。它没有被赋予一个实际的变量名,只是用于临时构造出一个合适类型(这里应该是 Date
类型相关对象)的数据。
临时对象具有常性,不可修改,我们对他引用的话就要加上const修饰。
C++11中的std::initializer_list:
initializer_list我们之前就已经学习过了,
initializer_list的底层是把这个数组拷贝过来,他的内部其实是存着两个指针,这两个指针分别指向这个数组的开始和结束。所以你可以传任意大的数组过来,因为他的这个对象里面只存储着两个指针,这两个指针指向数组的开始和结束。
当然我们可以使用auto,也可以正牌的使用initializer_list,因为auto会自动地识别的,你使用这种initializer_list的初始化方式,auto就会自动的识别为initializer_list类型的。
其实这里的上面的v1和v2的初始化方式initializer_list得到的,也是一种隐式类型转化,使用initializer_list的方式构造一个vector,然后再拷贝构造给给v1,当然编译器优化以后,相当于是直接进行构造了。 直接构造的话相当于是传参直接传给上面的initializer_list,
细节上说就是后面的花括号隐式类型转换使用initializer_list构造成一个vector,然后再拷贝构造给v1。
右值引用和移动语义:
我们上面的初始化方式的改变其实对C++影响不大,但是这里的这个右值引用和移动语义意义是非常大的
左值可以取地址,右值不能取地址。(右值一般来说不可修改)
因为左值的话,都是我们定义出来分配到某些空间的,右值的话,他一般不在这些空间里面,他可能是存在寄存器里面的。
右值可以是字符串常量,常数,临时对象,表达式之类的。
右值一般都是不可修改的。
我们说左值是相对于右值持久存在的,右值的话,生命周期基本上就是当前这一行,当前一行结束的话,他基本上就销毁了。
看上面的图片,这个右值x+y表达式,这个结果就是由临时对象存起来的。
string定义的匿名对象也是右值。(匿名对象)取不到地址。
string定义的有名对象是左值,这个我们可以取到地址。
左值引用和右值引用:
左值引用就是给左值取别名,右值引用就是给右值取别名:
我们看第二点,他说左值引用一般引用左值,不能直接引用右值,加上const的左值引用可以引用右值,因为右值是不可修改的,所以右值引用也就不能被修改,所以我们的左值引用加上const就可以引用右值。
所以我们的函数传参的时候,我们的参数一般都是const修饰的引用类型,这样的话,我们既可以传左值进去,也可以传右值进去。
然后第三点说的是,我们的右值引用一般引用的是右值,但是有的时候也可以引用左值,我们可以使用move,move是一个函数
我们看上面的图片,我们使用右值引用给我们的右值取别名。
然后是这个,普通的左值引用是因用不了右值的。(左值是可以被修改的,但是右值不能被修改,这里显然就是权限的放大)。
这里加上const修饰就没问题了。
我们继续看:
右值引用也是引用不了左值的。
这里我们要用move来进行:
我们的move函数的作用是强转:
move可以强制的把左值转成右值引用。
后面的两点我们就暂且不讲,后面的话我们会讲。
左值和右值的参数匹配:
我们看我们的函数,我们的这个函数可以传·左值,也可以传右值。
但是当我们函数重载,把这三种类型都重载起来的话(这里要说一下,函数的参数一样,但是一个有缺省值,一个没有缺省值,这个不能构成函数重载,因为如果我们要调这个函数不传参数的话,他知道我们调的是有缺省值的,但是如果我们调这个函数传参的话,他就不知道我们调的是哪个函数了),我们就是那个适合我们使用哪个函数。
我们看上面的,我们先看左边的图,我们的函数传值返回(自定义类型的)要调用拷贝构造,生成一份临时对象返回,然后我们的主函数,把我们的临时对象的数据拷贝构造给给新初始化的对象。
调用两次拷贝构造。没有优化的话代价比较大。
移动构造和移动赋值:
我们新学两个默认的成员函数,
我们看上面的概念,移动构造是一种拷贝构造,移动构造的话,他的第一个参数我们要求他是右值引用。参数列表后面也可以有其他的参数,但是必须要有缺省值。
我们看上面我们的红色字体写出来的,这两个函数我们构成了函数重载,右值的话,我们就使用右值引用,左值的话,我们使用左值引用。
我们这里写一个移动构造:
移动构造的参数是右值,右值的话,一般生命周期只有这个一行,这一行结束以后右值就销毁了。
因为这个右值快被销毁了,但是我们想要里面的数据,我们要把他拷贝一份然后销毁吗?
那就有点浪费了,我们就调用swap函数,直接把这个右值的数据和我们的this指针指向的对象的数据进行交换,然后右值里面的数据就到了我们这了,因为我们的这个拷贝构造作用的对象都是刚刚实例化的对象,我们的数据初始状态是这个,
把这个数据和右值里面的数据交换,然后右值销毁就可以了。这样的话消耗也比较小。
我们继续往下看:
我们看这个代码,我们的s3的话,我们右边实现进行一个构造+移动构造,因为他是右边构造了一个匿名对象,然后把匿名对象拷贝构造给s3,所以他就是移动构造。
s2的话,虽然我们的s1构造的他也是传了一个常量字符串,可以算右值,但是他是把s1构造出来,然后让s1拷贝构造给s2,因为s1是一个有名对象,是一个左值,所以是拷贝构造。
s4的话,他是把左值使用move强转成右值,所以这就是移动构造,但是我们使用move的话有风险,我们看图中的右边,我们的s1使用move强转后移动构造给s4,我们的s1的数据居然被销毁了
当我们有了移动构造的话,有什么好处呢?
我们看上面的图片:
我们看主函数,我们调用addstrings函数,我们的函数我们传了两个(常量字符串)右值,如果只有拷贝构造的时候,我们的addstrings函数的传值返回会调用拷贝构造生成临时对象,然后临时对象调用拷贝构造给到ret。
但是如果有移动构造的话,我们看临时对象调用拷贝构造赋值给ret这个过程,因为他是一个临时对象,所以拷贝构造升级成移动构造,我们直接把数据交换就可以了,然后我们看str返回值,这里的话你可以认为编译器会给他进行一个特殊处理,相当于给他move一下让他拷贝构造生成临时对象的过程也变成移动构造。,swap两次就好了,极大的减少了负担。
这里就是大大的改变,我们的左值的话,我们还是要深拷贝,但是我们的右值的话,直接swap就可以了。
在vs上我们看不了他的不优化的场景,不优化的场景我们可以在Linux上看:
我们看这个没有移动构造的,,没有的话,我们的两个参数传值传参都是要调用拷贝构造的,这个消耗就比较大,,然后函数结束的时候传值返回要调用拷贝构造生成临时对象,临时对象再拷贝构造给到ret。
//这个是我们有移动构造的:
上面之前的拷贝构造升级成移动构造,消耗减少;
上面的右值(临时对象和匿名对象)在结束这行代码以后,生命周期结束,就会自动的调用析构。
移动赋值:
移动赋值,
当我们的主函数里面是这种的话,我们的ret是已经存在的,ret是已经存在的话,那他就不是拷贝构造了,他就是复制重载,
当我们实现了移动赋值的话:
我们看这个图片:我们的函数传值返回会调用拷贝构造,有移动构造的话,我们的编译器会把str转换为右值可以调用移动构造,然后我们的会调用复制重载,但是我们的这个函数的返回值是一个临时对象,他是一个右值,他这一行结束以后生命周期就结束了,
那我们为什么要在开辟一段空间然后赋值给他呢?
我们可以直接把他和我们的ret的数据进行交换呢?
我们交换以后右值会带着我们不要的数据进行销毁。这就很好。
当然可以,我们这个移动复制做到了。
容易混淆的点:
看这个代码:
为什么我们的传值返回和传值传参要调用拷贝构造?
我们之前学习类和对象的时候,我们说自定义类型的传值传参和传值返回会调用拷贝构造,这样的消耗比较大,我们尽量还是使用传引用传参,这样消耗小一点。
但是有的时候我们的传引用不太行。
这里我们看上面的函数,我们在函数里面实例化出了一个对象,然后我们返回这个对象,主函数里面我们接受他给 result(类实例化的对象)来初始化,
我们这里的话就不能使用传引用返回来进行,因为出了我们的函数以后我们的对象 obj 就自动的调用析构函数进行析构了,这时候我们的引用就成了野引用了。
{ 举个例子:野引用就是(我把林冲都给杀了,然后我再派人去找豹子头,那一定找不到,这就是有问题的)。(这个我们之前讲过,今天复习一下)。}
那我们都说了,我们出了函数以后我们的 obj 都已经被析构了,那我们传引用回去一定是初始化不了result的,我们这个函数就使用传值返回,既然我们的obj本身被销毁了,我们就在obj被销毁之前,拷贝一份回去,,我们这里就要调用拷贝构造来进行拷贝,我们把拷贝的这份数据就叫做------临时对象。(这份临时对象是我们的obj的拷贝)
所以说,我们的自定义类型传值返回要调用拷贝构造;
但是至于传值传参要调用拷贝构造,这个当然毋庸置疑,我们把一个对象传过去,当然要把他的数据拷贝上来。
我们看这个图片,这个图片就是我们上面的代码的底层(不优化),我们实例化对象obj调用构造函数,然后传值返回调用拷贝构造,拷贝构造一份obj生成临时对象。
然后你还记得我们的拷贝构造的定义吗,拷贝构造是把一份数据赋值给正要初始化的对象。
而赋值重载的话,是两个对象本身就是存在的,早就初始化过了,然后一个对象赋值给另一个对象
这里就很显然,result对象正在初始化,这时候这个就是拷贝构造。
把result初始化完后,临时对象的生命就结束了,临时对象是一个右值,他的生命周期只有这一行
然后我们先析构临时对象,再析构obj,尊从析构函数的先构造的后析构,后构造的先析构的原理
/
简单理解:传值返回会调用拷贝构造生成临时对象,临时对象可以拷贝构造赋值给刚实例化的对象
这里我们在再讲一个普通的内置类型的函数的这类型:
这个虽然是内置类型相比自定义类型的简单多了,但还是说一下吧。
看这个函数,这个是一个普通的加法函数,他的返回值是一个int类型的,它返回的是一个式子,我们刚才上面的说了,表达式就是右值。右值一般是不可以修改的。
但是:看下面,其实
不管你这里是不是返回的一个表达式,这里的话,你都是不能修改的,因为我们要返回这个值,但似乎我们的变量在出了函数以后就被销毁了,所以我们的传值返回都是先把这个变量的数据拷贝一份,,,生成一个临时对象,然后返回到主函数的调用里面去。
这时候这个就是一个临时对象,具有常性,不可修改。
我们继续看:
我们看赋值给result,这里我们的result不再是自定义类型的,而是内置类型的。
我们再看第三个正确的说明,我们可以给返回值的临时对象加上一个2,再赋值给新的变量,这个是可以的,因为这个相加就是一个式子,一个表达式,,表达式计算的结果就是一个临时对象,我们的函数的返回值自己并没有自增。
Add(x, y) + 2
整体构成一个右值表达式,其计算结果也是一个右值。我们说右值一般是不能修改的。
相关文章:
C++ 11(1):
C11的发展史: C11中的{}: 看这个图片,我们的C11是所有的对象都可以使用{}来进行初始化,之前我们的int类型的数据要使用赋值符号来进行初始化,现在的话我们可以直接使用花括号来进行,并且连赋值符号都可以去…...
数据结构(4)线性表-链表-双链表
一、链表的分类 迟来的分类,主要如果在学习单链表前去讲分类,可能就云里雾里的,所以放在讲完单链表后讲。 划分链表的标准如下: 有没有头结点、指针的方向、循环与否 头结点就是一个占位结点,也被叫做哨兵位&#x…...
Spring Framework 的 spring-core 和 Spring Security 兼容版本
Spring Framework 的 spring-core 和 Spring Security 兼容版本 Spring Framework 的 spring-core 和 Spring Security 的版本需要保持兼容性,尤其是在旧版本(如 Spring 4.x)中。以下是它们的版本对应关系: Spring 4.x (spring-c…...
《国家职业教育平台:点亮职业教育新灯塔》
职教新航标:平台诞生记 国家职业教育智慧教育平台 在科技飞速发展的今天,数字化浪潮席卷全球,深刻地改变着我们生活的方方面面,教育领域也不例外。随着信息技术的不断进步,教育数字化已成为当今世界教育发展的重要趋势…...
Java多线程深度解析:从核心机制到高阶实战
Java多线程深度解析:从核心机制到高阶实战 摘要:本文系统解析Java多线程全体系知识,涵盖线程实现原理、并发工具实战、锁机制底层实现、线程池参数调优策略,并提供20可运行代码片段。附内存模型原理与性能优化指南。 目录 线程基…...
大量程粗糙度轮廓仪适用于哪些材质和表面?
大量程粗糙度轮廓仪是一种能够在广泛的测量范围内对工件表面进行粗糙度分析的精密仪器。它通常采用接触式或非接触式传感器,通过对工件表面的扫描,捕捉表面微观的起伏和波动,从而获取粗糙度数据。该仪器不仅能测量微小的表面细节,…...
NC028NQ472美光固态颗粒NQ484NQ485
深度解析:NC028NQ472、NQ484与NQ485美光固态颗粒 技术架构解析:堆叠式存储与算法优化 美光NC028NQ472、NQ484及NQ485系列固态颗粒均采用自研3D TLC NAND闪存技术,其核心架构通过垂直堆叠存储单元实现高密度集成。以NQ472为例,采…...
Cursor神一样的存在,核心能力codebase是如何工作的?
最近宣布达到 3 亿美元年度经常性收入,已经成为vibe coding标配。核心能力来自于Codebase。根据官方说法,codebase实现是依赖使用 Merkle 树来快速索引代码。但是没有竞品模仿这种方法。 Merkle是如何工作的那? Merkle 树简单解释 Merkle …...
python代码绘制某只股票最近90天的K线图、均线、量能图
运行代码,要求输入股票代码和名称,其他参数可省略 import akshare as ak import matplotlib.pyplot as plt import pandas as pd import mplfinance as mpf import matplotlib.dates as mdates import numpy as np import os from datetime import date…...
upload-labs通关笔记-第15关 文件上传之getimagesize绕过(图片马)
目录 一、图片马 二、文件包含 三、文件包含与图片马 四、图片马制作方法 五、源码分析 六、制作图片马 1、创建脚本并命名为test.php 2、准备制作图片马的三类图片 3、 使用copy命令制作图片马 七、渗透实战 1、GIF图片马渗透 (1)上传gif图…...
反弹shell
shell了解 shell其xxxx是交互,点鼠标敲键盘与计算机进行交互,还有常见的shell(cmd,powershell) shell反弹 当远程连接shell(windows远程桌面,linux有SSH之类),从外面远…...
【动手学深度学习】1.3. 各种机器学习问题
目录 1.3. 各种机器学习问题1)监督学习(supervisedlearning)(1)回归(regression)(2)分类(classification)(3)标记问题&…...
OS进程调度
tss Q1:你是如何保证两个进程不能同时访问共享资源的? ✅ 推荐回答: 我实现了基于结构体的互斥锁,使用 mutex_lock() 来加锁资源。如果已有任务持有锁,则当前任务会被阻塞并加入等待队列,直到被唤醒。解锁…...
MCP和 AI agent 有什么区别和联系
MCP 是什么? MCP(Model Context Protocol,模型上下文协议)是一种开源通信协议,旨在为大型语言模型(LLM)与外部数据源、工具或服务之间建立标准化、安全且灵活的双向连接。它类似于“AI 的 USB-…...
用Recommenders,实现个性化推荐
文章目录 引言一、Recommenders简介二、选择Recommenders的原因三、智能推荐系统的设计与实现四、总结 引言 在这个信息如洪流般涌来的时代,你是否常常在茫茫的信息海洋中迷失方向,为找不到自己心仪的内容而苦恼?今天咱们就来聊聊基于Micros…...
MCP-1:MCP组件与工作流程
MCP-1:MCP组件与工作流程 1.什么是MCP2.MCP架构组件2.1.MCP Hosts2.2.MCP Client2.3.MCP Server3.交互流程3.1.用户提问3.2.LLM 推理选择MCP Server(大模型规划)3.3.调用 MCP Tool3.4.返回结果3.5.数据清洗3.6.反馈信息给用户1.什么是MCP MCP(Model Context Proto…...
NVIDIA GPU 性能调优与诊断完全指南
本文为多 GPU 用户(如 3*RTX A4000 系统)提供一份全面的调优与诊断手册,涵盖功率限制、风扇控制、频率锁定、缓存清理、GPU 重置与性能测试工具等操作命令,适合开发者与研究人员在部署前进行系统级优化与验证。 📌 目录…...
从运维告警到业务决策:可观测性正在重新定义企业数据基础设施
可观测性(Observability)与传统监控(Monitoring)的核心差异,本质上是一种数据维度的主动暴露与被动采集的范式转变。传统监控就像在黑暗森林中设置有限的探照灯,运维人员必须预先假设可能的故障路径&#x…...
配电网运行状态综合评估方法研究
1评估指标体系的构建 [1]冷华,童莹,李欣然,等.配电网运行状态综合评估方法研究[J].电力系统保护与控制,2017,45(01):53-59. 1.1评估范围 图1为配电系统组成示意图,其中A、B、C分别表示高、中、低压配电系统。高压配变(也称主变)将35kV或110kV的电压降到10kV&#…...
Linux中I/O复用机制epoll
1. 为什么会出现 epoll? 在早期的网络编程中,select 是一个非常常用的 I/O 复用机制,用于在多个文件描述符(如套接字)上进行 I/O 操作的检测。select 会将多个文件描述符传入,轮询检查它们的状态ÿ…...
数据库表关系详解
一、一对多关系 特征:表A的一条记录对应表B的多条记录,表B的一条记录仅对应表A的一条记录 示例: 学生表(子表) | id | name | class_id | |-----|------|----------| |1001| 张三 | 111 | |1002| 张四 | 222 | 班级表…...
Agentic Loop与MCP:大模型能力扩展技术解析
一、什么是MCP MCP(Model Context Protocol)是一种用于大语言模型与外部工具交互的协议框架。它允许大语言模型能够调用各种外部工具来扩展其能力边界,如访问文件系统、搜索引擎、数据库等。 MCP的核心价值 能力扩展:使大语言模…...
贪心算法 Part04
总结下重叠区间问题 LC 452. 用最少数量的箭引爆气球 和 LC 435. 无重叠区间 本质上是一样的。 LC 452. 用最少数量的箭引爆气球 是求n个区间当中 , 区间的种类数量 k。此处可以理解为,重叠在一起的区间属于同一品种,没有重叠的区间当然…...
Spring事务简单操作
什么是事务? 事务是一组操作的集合,是一个不可分割的操作 事务会把所有的操作作为⼀个整体, ⼀起向数据库提交或者是撤销操作请求. 所以这组操作要么同时 成功, 要么同时失败. 事务的操作 分为三步: 1. 开启事start transaction/ begin …...
04算法学习_209.长度最小的子数组
04算法学习_209.长度最小的子数组题目描述:个人代码:学习思路:第一种写法:题解关键点: 第二种写法:题解关键点: 个人学习时疑惑点解答: 04算法学习_209.长度最小的子数组 力扣题目链…...
./build/mkfs.jffs2: Command not found
参考文章:https://blog.csdn.net/FLM19990626/article/details/132070195 sudo apt-get install lib32stdc6 sudo apt-get install lib32z1 sudo apt-get install mtd-utils sudo apt-get install man-db sudo apt-get install liblzo2-dev:i386sudo ldconfig...
从零基础到最佳实践:Vue.js 系列(4/10):《Vue Router 路由管理:深入探索与实战应用》
引言 在现代前端开发中,单页应用(SPA)凭借其流畅的用户体验和高性能成为主流。Vue Router 作为 Vue.js 的官方路由管理工具,为开发者提供了强大的路由管理能力,帮助实现页面导航、权限控制和动态内容加载。本文将从基…...
深入解析C++静态成员变量与函数
当然可以!下面是对这段 C 代码的逐行详细注释说明和解释,帮助你理解静态成员变量和静态成员函数的使用。 🧱 类定义部分:MyClass cpp 深色版本 #include <iostream> 说明:包含标准输入输出流库,用于…...
基于JDBC的信息管理系统,那么什么是JDBC呢?什么又是DAO类?
1.JDBC JDBC 即 Java Database Connectivity,是 Java 语言中用于与数据库进行交互的一套 API。它提供了一种标准的方式,让 Java 程序能够连接到各种不同类型的数据库,并执行 SQL 语句来实现对数据库的查询、插入、更新和删除等操作。 主要功…...
Java虚拟机 -虚拟机栈
虚拟机栈详解 虚拟机栈概述案例常见的跟虚拟栈异常相关的异常StackOverflowError异常OutOfMemoryError异常 栈的基本存储单位局部变量表IDEA Jclasslib Bytecode Viewer插件slot 操作数栈方法调用(待后续补充) 虚拟机栈 上一篇文章,我们简单…...
【AI News | 20250521】每日AI进展
AI Repos 1、OpenHands OpenHands(前身为OpenDevin)是一个由AI驱动的软件开发代理平台,它能够像人类开发者一样修改代码、运行命令、浏览网页、调用API,甚至从StackOverflow复制代码片段。用户可以通过OpenHands Cloud轻松上手&a…...
RAG 挑战赛冠军方案解析:从数据解析到多路由器检索的工程实践,推荐阅读!
多路由器 动态知识库:RAG 冠军方案的核心技术揭秘 源码地址:https://github.com/IlyaRice/RAG-Challenge-2/tree/main 公司年报智能问答比赛任务简介 比赛的任务是基于公司年度报告构建一个问答系统。简单来说,比赛当天的流程如下ÿ…...
Java基础 Day17
一、递归 方法直接或者间接调用本身 将大问题, 层层转化为一个与原问题相似的、规模更小的问题来解决 二、异常 程序在编译或执行过程中,出现的非正常的情况 (错误) 语法错误不是异常 1、阅读异常信息 从下往上看:发生异常的位置、异常名称、发生异…...
系分论文《论软件系统安全分析和应用》
系统分析师论文范文系列 【摘要】 2023年3月,我司承接了某知名电商企业“智能化供应链管理系统”的开发任务,我作为系统分析师负责全面的安全分析与设计工作。该系统以提升电商供应链效率为核心,整合仓储、物流、支付等模块,并需应…...
蓝耘Ubantu服务器测试最新 PP-StructureV3 教程
一、服务器配置 二、安装Anaconda3 进入云服务器后删除minconda文件夹 官网: https://repo.anaconda.com/archive/ 在里面找到自己系统的安装包,然后右击复制链接安装。 一定要选择Anaconda,因为很多依赖问题用Minconda容易报错。 wget https://repo…...
File文件
路径: 相对路径:以 当前工作目录(或指定的基准目录)为起点,描述目标文件或目录的位置,不包含根目录信息,仅表示与基准目录的相对位置关系。绝对路径:从文件系统的 根目录 开始&…...
Wireshark抓包分析小程序接口请求教程
## 1. 准备工作 ### 1.1 安装Wireshark - 访问Wireshark官网 (https://www.wireshark.org/) 下载最新版本 - 按照安装向导完成安装 - 确保安装时选择安装WinPcap或Npcap(用于网络数据包捕获) ### 1.2 配置环境 - 确保电脑已连接网络 - 如果使用手机…...
C++之模板进阶(探索C++模板:非类型参数与特化技巧)
本节目标: 1.非类型模板参数 2.类模板的特化 3.类模板特化的应用之类型萃取 4.模板的分离编译 非类型模板参数 模板参数分 类型形参与非类型形参 类型形参:出现在模板参数列表中,跟在class或者typename之类的参数类型名称 非类型形…...
【项目记录】准备工作及查询部门
1 开发规范 1.1 前后端分离开发 现在的企业项目开发有2种开发模式:前后台混合开发和前后台分离开发。 前后台混合开发,顾名思义就是前台后台代码混在一起开发 这种开发模式有如下缺点: 1. 沟通成本高:后台人员发现前端有问题&a…...
chromedp -—— 基于 go 的自动化操作浏览器库
chromedp chromedp 是一个用于 Chrome 浏览器的自动化测试工具,基于 Go 语言开发,专门用于控制和操作 Chrome 浏览器实例。 chromedp 安装 go get -u github.com/chromedp/chromedp基于chromedp 实现的的简易学习通刷课系统 目前实现的功能ÿ…...
企业级调度器LVS
访问效果 涉及内容:浏览拆分、 DNS 解析、反向代理、负载均衡、数据库等 1 集群 1.1 集群类型简介 对于⼀个业务项⽬集群来说,根据业务中的特性和特点,它主要有三种分类: 高扩展 (LB) :单个主机负载不足的时候…...
MySQL中的重要常见知识点(入门到入土!)
基础篇 基础语法 添加数据 -- 完整语法 INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);-- 示例 insert into employee(id,workno,name,gender,age,idcard,entrydate) values(1,1,Itcast,男,10,123456789012345678,2000-01-01) 修改数据 -- 完整语法 UPDA…...
29.第二阶段x64游戏实战-技能冷却
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:28.第二阶段x64游戏实战-代码实现遍历技能 找技能冷却要通过一个技能cd长点的&…...
第19天-Python自动化生成PPT图文教程(基于python-pptx)
环境准备 pip install python-pptx Pillow 基础示例:批量插入图片 from pptx import Presentation from pptx.util import Inches import os from PIL import Image def create_image_slides(): # 初始化演示文稿 prs = Presentation() # 获取当前目录所…...
基于STM32的骑行语音播报系统
目录 一、前言 二、项目功能说明 三、主要元器件 四、原理图与PCB 五、手机APP 六、完整资料 一、前言 项目成品图片: 哔哩哔哩视频链接: 咸鱼商品链接: 基于STM32的骑行语音播报系统 二、项目功能说明 基础功能: 1&…...
springboot链接nacos测试
代码资料链接:https://download.csdn.net/download/ly1h1/90881498 场景说明:本次测试是springboot项目,可以链接上ncaos,将对应命名空间下的配置信息读取出俩,然后可以在接口进行返回显示。 0.环境配置 1.代码结构 …...
【初识】内网渗透——基础概念,基本工具使用
目录 一、域,工作组,域控制器,活动目录相关概念: 域环境: 工作组: 域控制器DC: 活动目录AD: 二、内网的基本场景: 三、内网渗透基本测试方案: #案例1一基本信…...
AI练习:混合圆
方法一:在圆内 1.画圆 选择椭圆工具,按住Shift键绘制正圆; CtrlC复制,CtrlF原地粘贴,按住Shift键缩小圆,移动位置; 再CtrlC,CtrlF,再按住Shift键缩小圆,移…...
心知天气 API 获取天气预报 2025/5/21
心知天气 API 获取天气预报 2025/5/21 URL格式: https://api.seniverse.com/v3/weather/now.json?key填你的秘钥&locationbeijing(这里填城市 可以用拼音)&languagezh-Hans&unitc 返回格式如下:...
PCB设计教程【入门篇】——电路分析基础-元件数据手册
前言 本教程基于B站Expert电子实验室的PCB设计教学的整理,为个人学习记录,旨在帮助PCB设计新手入门。所有内容仅作学习交流使用,无任何商业目的。若涉及侵权,请随时联系,将会立即处理 目录 前言 一、数据手册的重要…...