【C++】C++的拷贝构造函数介绍使用
拷贝构造函数
- 1.作用
- 示例代码1:拷贝构造函数的调用
- 示例代码2:系统默认的拷贝构造做的事情
- 示例代码3:写法1-4
- 示例代码4:写法5
- 示例代码5:C++编译器默认给类提供了4中隐含的方法
- 2.语法规则
- 示例代码:
- 3.深拷贝和浅拷贝
- 3.1.浅拷贝(指针赋值时有bug)
- 3.2.深拷贝
1.作用
\quad 用一个对象去初始化赋值给另外一个新的对象的时候就会自动调用拷贝构造函数(常规的赋值不会调用拷贝构造函数)
Cat c1;
Cat c2;
c2=c1; 常规的赋值不会调用拷贝构造函数
具体写法:
int a=15;
int b=a; //定义变量b,立马用a(已经有的变量)去 初始化赋值int a=15;
int b; //定义变量b,没有初始化
b=a; //给b赋值,不叫做初始化赋值 --常规赋值同样的道理(拷贝构造函数调用的情况总结)
Animal a(6,60.5);
写法一:Animal b=a; //调用拷贝构造函数
写法二:Animal b(a); //调用拷贝构造函数
写法三:Animal b=Animal(a); //调用拷贝构造函数
写法四:Animal *b=new Animal(a); //调用拷贝构造函数
写法五:如果一个函数返回值是类对象,当保存返回值的时候,也是调用拷贝构造函数(取决于编译器的具体实现)gcc默认会优化返回值调用拷贝构造函数,若要看到现象,在编译时取消优化g++ xx.cpp -fno-elide-constructors实参传递值给形参(都是类对象),调用拷贝构造函数
示例代码1:拷贝构造函数的调用
#include <iostream>
using namespace std;/*只要用一个对象去初始化赋值给另外一个新对象--》就调用拷贝构造
*/class Animal
{
public:// 定义动物的构造函数Animal(){cout<<"动物的构造函数,当前对象是:"<<this<<endl;}// 自定义拷贝构造函数Animal(const Animal &other){cout<<"动物的拷贝构造函数,参数other地址:"<<&other<<" 当前对象地址:"<<this<<endl;}private:};int main(int argc, char const *argv[])
{Animal a1; // 调用构造函数Animal a2 = a1; // 调用拷贝构造Animal a3; //调用构造函数Animal a4; //调用构造函数a3 = a4; //调用赋值运算return 0;
}/*
执行结果:动物的构造函数,当前对象是:0x7ffc0d773204动物的拷贝构造函数,参数other地址:0x7ffc0d773204 当前对象地址:0x7ffc0d773205动物的构造函数,当前对象是:0x7ffc0d773206动物的构造函数,当前对象是:0x7ffc0d773207
*/
示例代码2:系统默认的拷贝构造做的事情
#include <iostream>
using namespace std;/*通过现象反推:系统默认的拷贝构造函数究竟帮我们做了什么
*/class Cat
{
public://定义猫类的构造函数Cat(string _name,int _age){name=_name;age=_age;cout<<"猫的构造函数"<<endl;}void show(){cout<<"name : "<<name<<" age is: "<<age<<endl;}private:int age;string name;
};int main(int argc,char **argv)
{Cat c1("来福",5);//调用系统默认提供的拷贝构造/*//this就是c2 other就是c1Cat(const Cat &other){this->name=other.name; this->age=other.age;}*/Cat c2=c1; //无法直观的感受到调用了拷贝构造函数//Cat c2(c1); //调用拷贝构造函数//Cat c2=Cat(c1); //调用拷贝构造函数 //验证结果c2.show();return 0;
}/*
执行结果:猫的构造函数name : 来福 age is: 5
*/
示例代码3:写法1-4
#include <iostream>
#include <cstring>
using namespace std;/*什么时候调用拷贝构造?一句话:右边的对象初始化赋值给左边的新对象
*/class Cat
{
public://定义猫类的构造函数Cat(){cout<<"猫的构造函数,当前对象是: "<<this<<endl;}//自己写个拷贝构造Cat(const Cat &other){cout<<"猫的拷贝构造函数被调用了"<<endl;}
private:};Cat fun()
{cout<<"fun函数返回猫的对象"<<endl;Cat temp;return temp;
}int main(int argc,char **argv)
{Cat c1; //调用构造函数//写法1:Cat c2=c1; //c2调用拷贝构造//写法2:Cat c3(c1); //c3调用拷贝构造//写法3:Cat c4=Cat(c1); //c4调用拷贝构造//写法4:Cat *c5=new Cat(c1); //c5调用拷贝构造//写法5:取决于编译器实现,有些编译系统是可以调用拷贝构造的//Cat ret=fun();//delete c5;return 0;
}
示例代码4:写法5
#include <iostream>
#include <cstring>
using namespace std;/*什么时候调用拷贝构造?一句话:右边的对象初始化赋值给左边的新对象
*/class Cat
{
public://定义猫类的构造函数Cat(){cout<<"猫的构造函数,当前对象是: "<<this<<endl;}//自己写个拷贝构造Cat(const Cat &other){cout<<"猫的拷贝构造函数被调用了"<<endl;}
private:};Cat fun()
{cout<<"fun函数返回猫的对象"<<endl;Cat temp;return temp;
}void otherfun(Cat obj1) //Cat obj1=c1;
{cout<<"otherfun函数被调用"<<endl;
}int main(int argc,char **argv)
{Cat c1; //调用构造函数//函数返回值:返回类对象,此时调用拷贝构造函数//g++编译默认会优化掉返回值返回类对象,调用拷贝构造函数//g++ xxx.cpp -fno-elide-constructors 这个选项告知编译器不要优化为普通构造函数Cat ret=fun(); // 拷贝构造调用2次 (第一次是temp给到一个匿名变量,第二次是匿名变量给到ret时)cout<<endl;//函数参数如果是类对象,你传递实参也是调用拷贝构造函数otherfun(c1);return 0;
}/*
执行结果:猫的构造函数,当前对象是: 0x7fff18a259e5fun函数返回猫的对象猫的构造函数,当前对象是: 0x7fff18a259b7猫的拷贝构造函数被调用了猫的拷贝构造函数被调用了猫的拷贝构造函数被调用了otherfun函数被调用
*/
示例代码5:C++编译器默认给类提供了4中隐含的方法
#include <iostream>
#include <cstring>
using namespace std;/*总结:C++编译器默认给类提供了哪些隐含的方法隐含的方法:程序员可以直接用的方法第一个隐含方法:默认构造函数第二个隐含方法:默认析构第三个隐含方法;默认拷贝构造第四个隐含方法:默认的赋值运算
*/class Cat
{
public://定义猫类的构造函数Cat(int _age){age=_age;cout<<"猫的构造函数"<<endl;}void show(){cout<<"age is: "<<age<<endl;}private:int age;
};int main(int argc,char **argv)
{Cat c1(10);Cat c2(5);c2=c1;c2.show();return 0;
}
2.语法规则
类名(const 类名 &)
{
代码
}
特点:
- 没有重载形式
- 一定是用对象初始化赋值给另一个对象才调用
(不是常规赋值,是初始化赋值)
- 如果程序员没有定义拷贝构造函数,系统会自动生成一个拷贝构造函数
如果程序员自定义拷贝构造函数,那么系统就不会再自动生成默认的拷贝构造函数
Animal(const Animal &other)
{other中的数据赋值给this
}
示例代码:
#include <iostream>
#include <cstring>
using namespace std;/*通过现象反推:系统默认的拷贝构造函数究竟帮我们做了什么
*/class Cat
{
public://定义猫类的构造函数Cat(string _name,int _age){name=_name;age=_age;cout<<"猫的构造函数"<<endl;}void show(){cout<<"name : "<<name<<" age is: "<<age<<endl;}private:int age;string name;
};int main(int argc,char **argv)
{Cat c1("来福",5);//调用系统默认提供的拷贝构造/*//this就是c2 other就是c1Cat(const Cat &other){this->name=other.name;this->age=other.age;}*/Cat c2=c1; //无法直观的感受到调用了拷贝构造函数//Cat c2(c1); //调用拷贝构造函数//Cat c2=Cat(c1); //调用拷贝构造函数 //验证结果c2.show();return 0;
}/*
执行结果:猫的构造函数name : 来福 age is: 5
*/
3.深拷贝和浅拷贝
3.1.浅拷贝(指针赋值时有bug)
\quad 指的就是使用系统默认的拷贝构造函数
,构造出来的新对象跟原有的对象共用同一块堆空间,一旦某个对象修改了堆空间中的数据,其它对象全部跟着修改,这种现象称之为浅拷贝。
#include <iostream>
#include <cstring>
using namespace std;/*默认的拷贝构造函数存在bug:引入什么是浅拷贝1.看现象我修改c1的姓名,c2也跟着被修改2.bug产生的前题条件属性当中用到了指针,申请了堆空间
*/class Cat
{
public://定义猫类的构造函数Cat(const char *_name,int _age){//name申请堆空间name=new char[20];strcpy(name,_name);age=_age;cout<<"猫的构造函数"<<endl;}//修改猫的属性void setAttr(const char *newname,int newage){strcpy(name,newname);age=newage;}void show(){cout<<"name : "<<name<<" age is: "<<age<<endl;cout<<"name 地址: "<<(int *)name<<endl;cout<<"age 地址: "<<&age<<endl;}private:int age;char *name;
};int main(int argc,char **argv)
{Cat c1("来福",5);//调用系统默认提供的拷贝构造/*//this就是c2 other就是c1Cat(const Cat &other){//此时name是指针,不是string的对象this->name=other.name; //两个name指向同一个地址this->age=other.age;}*/Cat c2=c1; //验证结果c1.show();c2.show();cout<<"==============修改之后=============="<<endl;//打算修改c1的属性--》按道理来说,跟c2无关,但由于c2这个对象的name指针指向的也是c1对象的name指针,所以c2对象name也会被修改c1.setAttr("莱宝",6);c1.show();c2.show();return 0;
}/*
执行结果:猫的构造函数name : 来福 age is: 5name 地址: 0x555fa44b6eb0age 地址: 0x7ffffbb95fc0name : 来福 age is: 5name 地址: 0x555fa44b6eb0age 地址: 0x7ffffbb95fd0==============修改之后==============name : 莱宝 age is: 6name 地址: 0x555fa44b6eb0age 地址: 0x7ffffbb95fc0name : 莱宝 age is: 5name 地址: 0x555fa44b6eb0age 地址: 0x7ffffbb95fd0
*/
3.2.深拷贝
\quad 程序员自己动手写个拷贝构造函数,解决浅拷贝的bug,这个自定义的拷贝构造函数实现就是深拷贝。
#include <iostream>
#include <cstring>
using namespace std;/*自己动手解决浅拷贝的问题--》实现了深拷贝
*/class Cat
{
public://定义猫类的构造函数Cat(const char *_name,int _age){//name申请堆空间name=new char[20];strcpy(name,_name);age=_age;cout<<"猫的构造函数"<<endl;}//自己写个拷贝构造函数Cat(const Cat &other){cout<<"我自己写的拷贝构造函数被调用,实现深拷贝"<<endl;//给当前对象的name单独申请堆空间this->name=new char[20];strcpy(this->name,other.name);this->age=other.age;}~Cat(){delete []name;}//修改猫的属性void setAttr(const char *newname,int newage){strcpy(name,newname);age=newage;}void show(){cout<<"name : "<<name<<" age is: "<<age<<endl;//cout<<"name 地址: "<<(int *)name<<endl;//cout<<"age 地址: "<<&age<<endl;}private:int age;char *name;
};int main(int argc,char **argv)
{Cat c1("来福",5);//调用我自定义的拷贝构造函数Cat c2=c1; //验证结果c1.show();c2.show();cout<<"==============修改之后=============="<<endl;//修改c1的属性--此时实现的是深拷贝,新对象申请了新的堆空间c1.setAttr("莱宝",6);c1.show();c2.show();return 0;
}/*
执行结果:猫的构造函数我自己写的拷贝构造函数被调用,实现深拷贝name : 来福 age is: 5name : 来福 age is: 5==============修改之后==============name : 莱宝 age is: 6name : 来福 age is: 5
*/
相关文章:
【C++】C++的拷贝构造函数介绍使用
拷贝构造函数 1.作用示例代码1:拷贝构造函数的调用示例代码2:系统默认的拷贝构造做的事情示例代码3:写法1-4示例代码4:写法5示例代码5:C编译器默认给类提供了4中隐含的方法 2.语法规则示例代码: 3.深拷贝和…...
能管理MySQL、Oracle、达梦数据库的桌面管理软件开源了
能管理MySQL、Oracle、达梦数据库的桌面管理软件开源了 能管理MySQL、Oracle、达梦数据库的桌面管理软件开源了1.项目介绍2. 项目源码开发2.1克隆项目2.2 配置并运行 3.使用3.1添加数据库连接3.2新增表3.3操作表3.4 运行sql 4.总结 能管理MySQL、Oracle、达梦数据库的桌面管理…...
5.20打卡
浙大疏锦行 DAY 31 文件的规范拆分和写法 知识点回顾 1. 规范的文件命名 2. 规范的文件夹管理 3. 机器学习项目的拆分 4. 编码格式和类型注解 作业:尝试针对之前的心脏病项目,准备拆分的项目文件,思考下哪些部分可以未来复用。 预处理&am…...
unity XCharts插件生成曲线图在UICanvas中
【推荐100个unity插件之22】基于UGUI的功能强大的简单易用的Unity数据可视化图表插件——XCharts3.0插件的使用_unity xcharts-CSDN博客...
创建thinkphp项目并配置数据库
配置环境并引入UI ssr模式 使用 composer 命令在指定的目录安装 Thinkphp6.x composer create-project topthink/think tp6demo出现Fatal error: Directive ‘track_errors’ is no longer available in PHP in Unknown on line 0说明你的php版本较高,在php.ini中…...
头歌实践平台:动态NAT配置
第一:打开GNS3,创建名为nat的项目文件 第二:创建网络拓扑结构如下: note:s端口线需要在关闭路由器的情况下双击进入,选配4T端口(不要忘记点击OK) 第三:打开所有设备(所…...
贝叶斯优化+CNN+LSTM=小论文创新点
2周速成小论文可能吗?有点悬,但有可能。今天我就给论文er推荐一个高潜力、易创新、适合速发的小论文选题:贝叶斯优化CNNLSTM! 这种“三结合”的优势在于技术成熟度高(经典CNN和LSTM)、创新点灵活性强&…...
软考中级软件设计师——计算机网络 IP地址与子网掩码相关题型
一、常见题型分类 题型考查重点解题关键子网划分根据需求划分子网,计算网络地址、广播地址、可用主机范围等二进制与十进制转换,子网掩码计算,网络位与主机位划分子网掩码转换CIDR表示法(如/24)与点分十进制ÿ…...
bi报表是什么意思?如何制作一张bi报表?
目录 一、BI 报表是什么意思? 1. BI 报表的基本概念 2. BI 报表的特点 3. BI 报表的作用 二、制作 BI 报表的前期准备 1. 明确报表的目标和需求 2. 确定数据来源 3. 选择合适的 BI 工具 三、制作 BI 报表的具体步骤 1. 数据收集与整理 2. 数据分析 3. 可…...
vivado fpga程序固化
一般下载到fpga上的程序在掉电之后就会丢失,如果想要掉电之后程序不丢失,就需要将比特流文件固化到板载的flash上。 以下以我的7a100t开发板为例,介绍程序固化的流程 点击OK就可以下载了。...
人生的真谛杂谈
文章目录 自我的哲学奠基自我存在的真实性身体与思想的决定关系自由意志自我的当代解构 三观的意义系统构建世界观:认知世界的根基人生观:生命意义的探索价值观:行为选择的准则三观构建的终极目标 价值的哲学解构价值的本体论价值客观性的形而…...
【Java】继承和多态在 Java 中是怎样实现的?
extends 关键字 class 子类 extends 父类 {... } // 类继承是单继承父类的哪些成员被继承 ? 访问修饰符 public 和 protected 修饰的父类成员字段和成员方法可以被继承 , 父类的默认方法只能在同包下继承 , 父类的 private 成员和构造方法不可继承 . super 关键字 表示父类…...
输出字母在字符串中位置索引
输入一个字符串,再输入两个字符,求这两个字符在字符串中的索引。 输入格式: 第一行输入字符串 第二行输入两个字符,用空格分开。 输出格式: 从右向左输出字符和索引,即下标最大的字符最先输出。每行一个。 输入样例: 在这里…...
Oracle中如何解决LATCH:CACHE BUFFERS LRU CHAIN
简单来讲,Oracle为了高效管理BUFFER CACHE主要使用以下2种LRU列: LRU列,又叫替换列(replacement list),其中又分为主列和辅助列。 主列:已使用的缓冲区列,分为HOT和COLD区域。HOT区…...
FPGA:基于Vivado的仿真流程与波形调试实践
在FPGA开发过程中,仿真是验证设计逻辑正确性的关键环节。尤其在复杂系统中,单靠硬件板级调试远远不够,往往需要依赖仿真工具提前发现潜在问题,提升开发效率。本文将结合Xilinx Vivado设计套件,系统梳理从仿真环境构建到…...
前端流行框架Vue3教程:20. 插槽slot(2)
插槽slot(2) 渲染作用域 插槽内容可以访问到父组件的数据作用域,因为插槽内容本身是在父组件模板中定义的 SlotsTow.vue <script> export default {data() {return {};} } </script><template><h3>Slots续集</…...
CodeBuddy全新升级:体验Craft智能体的对话式编程革命
本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 腾讯云AI编程助手官网:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 目录 引言:软件开发的新范式 一、Craft智能体核心功能解析 1.1 自然语…...
基于SpringBoot+Vue的学籍管理系统的设计与实现
获取源码:SpringBootVue的学籍管理系统: 学籍管理系统:登录、个人中心、学生管理、教师管理、学院管理、专业管理、班级信息管理、课程信息管理、学生成绩管理、学生学籍管理、招生信息录入等功能 系统演示视频地址:SpringBootVue的学籍管理…...
【动态规划】P10988 [蓝桥杯 2023 国 Python A] 走方格|普及+
本文涉及知识点 C动态规划 P10988 [蓝桥杯 2023 国 Python A] 走方格 题目描述 给定一个 N N N 行 N N N 列的方格,第 i i i 行第 j j j 列的方格坐标为 ( i , j ) (i, j) (i,j),高度为 H i , j H_{i,j} Hi,j。小蓝从左上角坐标 ( 0 , 0 ) …...
pycharm无法正常调试问题
pycharm无法正常调试问题 1.错误代码 已连接到 pydev 调试器(内部版本号 231.8109.197)Traceback (most recent call last):File "E:\Python\pycharm\PyCharm 2023.1\plugins\python\helpers\pydev\_pydevd_bundle\pydevd_comm.py", line 304, in _on_runr r.deco…...
自学嵌入式 day21 - 数据结构 双向链表
1.双向链表 2.基础操作 (1)头部插入 int InsertHeadDouLinkList(DouLinkList *dl,DATATYPE *data) { DouLinkNode *newnode (DouLinkNode *)malloc(sizeof(DouLinkNode));//定义新节点来存储需插入的数据 if(NULL newnode)//判断结点空间…...
Ubuntu 22.04安装zabbix7.0.0图形中文乱码
在 Ubuntu 22.04 上安装 Zabbix 7.0.0 时,如果图形界面(如仪表盘、图表)出现中文乱码,通常是因为缺少中文字体或字体配置不正确。以下是完整的解决方案: 1. 安装中文字体 安装 fonts-wqy-microhei(文泉驿微…...
docker环境和dockerfile制作
docker 一、环境和安装 1、 docker安装 使用 root 权限登录 CentOS。确保 yum 包更新到最新sudo yum update卸载旧版本yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux …...
《经济日报》深度聚焦|珈和科技携手万果博览荟共筑智慧农业新示范高地 全链赋能蒲江茶果产业数字化转型升级
近日,《经济日报》深度聚焦报道了《珈和科技携手万果博览荟打造智慧农业新示范 双轮驱动绘就西南农业全链发展新篇章》。 作为国家级重点财经新闻媒体,《经济日报》对珈和科技与蒲江县人民政府战略合作签约,成立四川珈和科技子公司落地万果博…...
科技赋能·长效治理|无忧树建筑修缮渗漏水长效治理交流会圆满举行!
聚焦行业痛点,共话长效未来!5月16日,由无忧树主办的主题为“科技赋能长效治理”的建筑修缮渗漏水长效治理技术交流会在上海圆满举行。来自全国的建筑企业代表、专家学者、技术精英齐聚一堂,共探渗漏治理前沿技术,见证科…...
文章记单词 | 第100篇(六级)
一,单词释义 immediate /ɪˈmiːdiət/ adj. 立即的;直接的;紧迫的hypothesis /haɪˈpɑːθəsɪs/ n. 假设;假说(复数:hypotheses)disregard /ˌdɪsrɪˈɡɑːrd/ v./n. 忽视;…...
React表单开发的瑞士军刀:Formik与Yup实战指南
——揭秘高效表单开发的黄金公式 开篇:一场关于效率的革命 2023年某日凌晨,某互联网大厂会议室灯火通明。前端团队正为表单校验逻辑争论不休: “每次写表单都要重复处理触碰状态、错误消息、异步验证…” “受控组件状态管理太繁琐…...
瑞莎星睿 O6 (Radxa Orion O6)-ubuntu24.04-ROS2 运行深度估计模型
引言 由Radxa联合此芯科技与安谋科技打造的"星睿O6"迷你ITX主板堪称当前最受期待的开发板之一。该产品搭载的CIX P1(CD8180)12核Armv9处理器配合30TOPS算力的NPU和高性能GPU,结合最高64GB LPDDR内存,非常适合AI开发工作…...
【ubuntu】虚拟机连不上网,且网络中没有有线连接
错误图示 sudo gedit /etc/NetworkManager/NetworkManager.conf managedtruesudo gedit /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf 添加except:type:ethernet,然后重启 sudo service network-manager stop sudo rm /var/lib/NetworkManager/Networ…...
Ubuntu软件仓库与更新源配置指南
一、软件仓库基础知识 软件仓库的作用 Ubuntu 通过预设的软件仓库(Repository)提供软件包,包含系统核心组件、第三方应用及安全更新。仓库分为: Main:官方维护的自由开源软件 Universe:社区维护的自由开源…...
Docker run -v 的 rw 和 ro 模式_docker ro
一、前言 在使用 Docker 启动容器时,通常需要将宿主机的文件或目录挂载到容器中,以便于管理配置、持久化数据和调试日志。本篇博客将重点介绍 -v/--volume 参数的使用方式、挂载权限(rw 与 ro)的区别,以及如何通过 do…...
React+TypeScript多步骤表单:告别表单地狱的现代解决方案
开篇:深夜的表单困局 凌晨两点,键盘声在寂静的办公室回响。前端工程师小李盯着屏幕上的错误提示:“类型"FormData"上不存在属性’email’”。这已经是本周第三次因为字段名拼写错误导致的调试灾难。他揉着发酸的眼睛想:…...
【工具使用】STM32CubeMX-USB配置-实现U盘功能
一、概述 无论是新手还是大佬,基于STM32单片机的开发,使用STM32CubeMX都是可以极大提升开发效率的,并且其界面化的开发,也大大降低了新手对STM32单片机的开发门槛。 本文主要讲述STM32芯片USB功能的配置及其相关知识。 二…...
【LUT技术专题】DnLUT代码解读
目录 原文概要 1. 训练 本文是对DnLUT技术的代码解读,原文解读请看DnLUT。 原文概要 DnLUT通过PCM模块和L型卷积,有效提升以往基于LUT方法降低色噪声的能力,用最小的存储量得到了同样的感受野范围,主要是2个创新点࿱…...
python宠物用品商城系统
目录 技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理,难度适中…...
2156. 查找给定哈希值的子串
给定整数 p 和 m ,一个长度为 k 且下标从 0 开始的字符串 s 的哈希值按照如下函数计算: hash(s, p, m) (val(s[0]) * p0 val(s[1]) * p1 ... val(s[k-1]) * pk-1) mod m. 其中 val(s[i]) 表示 s[i] 在字母表中的下标,从 val(a) 1 到 v…...
Index-AniSora技术升级开源:动漫视频生成强化学习
B站升级动画视频生成模型Index-AniSora技术并开源,支持番剧、国创、漫改动画、VTuber、动画PV、鬼畜动画等多种二次元风格视频镜头一键生成! 整个工作技术原理基于B站提出的 AniSora: Exploring the Frontiers of Animation Video Generation in the So…...
游戏引擎学习第297天:将实体分离到Z层中
回顾并为今天的内容做准备 昨天我们做了雾效混合(fog blend)和透明度混合(alpha blending)的尝试,现在正在进行渲染部分的深度(Z)清理工作。今天的重点是把“切片”(slices…...
全局对比度调整
目录 一、全局对比度调整原理 二、饱和度保持 一、全局对比度调整原理 Figure1.2 展示了一幅全局对比度较低的图像及其亮度直方图。该直方图分布范围较窄,像素的强度仅集中在中间调区域,不存在明亮或深色的像素,因此图像中的细节难以区分,可用动态范围未得到有效利用。在动…...
Canvas SVG BpmnJS编辑器中Canvas与SVG职能详解
Canvas详解与常见API 一、Canvas基础 核心特性 • 像素级绘图:Canvas是基于位图的绘图技术,通过JavaScript操作像素实现图形渲染,适合动态、高性能场景(如游戏、数据可视化)。 • 即时模式:每次绘制需手动…...
【图像大模型】Stable Diffusion 3 Medium:多模态扩散模型的技术突破与实践指南
Stable Diffusion 3 Medium:多模态扩散模型的技术突破与实践指南 一、架构设计与技术演进1.1 核心架构革新1.2 关键技术突破1.2.1 整流流(Rectified Flow)1.2.2 动态掩码训练 二、系统架构解析2.1 完整推理流程2.2 性能对比 三、实战部署指南…...
PID项目---硬件设计
该项目是立创训练营项目,这些是我个人学习的记录,记得比较潦草 1.硬件-电路原理电赛-TI-基于MSPM0的简易PID项目_哔哩哔哩_bilibili 这个地方接地是静电的考量 这个保护二极管是为了在电源接反的时候保护电脑等设备 大电容的作用:当电机工作…...
渗透测试流程
2.1 信息收集 2.1.1 资产监控与架构分析 目标:明确目标范围(IP、域名、子公司资产),识别网络架构(云服务/CDN/反向代理)。 工具与技巧: 使用FOFA、Shodan搜索关联资产(如title="目标公司")。 通过nslookup或dig解析域名,确认真实IP是否隐藏于CDN…...
PCIe EP/RC 核心功能解释
1. Bar访问(BAR Access) BAR(Base Address Register) 是 PCIe 设备上的 地址窗口,用于主机与设备之间的 寄存器访问。功能: 主机通过 BAR 访问 EP 卡的 控制寄存器 或 数据缓冲区。每个 BAR 对应一段物理内…...
srs-7.0 支持obs推webrtc流
demo演示 官方教程: https://ossrs.net/lts/zh-cn/blog/Experience-Ultra-Low-Latency-Live-Streaming-with-OBS-WHIP 实现原理就是通过WHIP协议来传输 SDP信息 1、运行 ./objs/srs -c conf/rtc.conf 2、obs推流 3、web端播放webrtc流 打开web:ht...
SQLynx 团队协作实践:提升数据库开发效率的解决方案
在数据库开发与管理场景中,团队协作的效率直接影响项目进度与质量。传统协作方式常面临权限混乱、代码复用率低、跨地域协作困难等问题,而 SQLynx 作为一款轻量化 Web SQL 工具,凭借其独特的团队协作功能,为这些难题提供了有效解决…...
基于自然语言转SQL的BI准确率如何?
基于自然语言转SQL的商业智能(BI)工具的准确率受多种因素影响,目前整体处于中等偏上水平,但尚未达到完全精准的程度。以下从技术原理、影响准确率的因素、实际应用场景及未来趋势等方面展开分析: 一、技术原理与当前准…...
「华为」持续加码人形机器人赛道!
温馨提示:查看运营团队2025年最新原创报告(共210页) —— 正文: 现阶段,全球大厂入局具身智能赛道典型代表:[英伟达]和[特斯拉],是全球科技巨头/大厂(谷歌、微软、Meta、OpenAI、华…...
Visual Studio 2022 无法编译.NET 9 项目的原因和解决方法
Visual Studio 2022 无法运行.NET 9 项目的原因和解决方法。 目录 1. Visual Studio 2022 无法编译TargetFramework是.NET 9 项目 2. 解决方法 3. 用Visual Studio Code开发 1. Visual Studio 2022 无法编译TargetFramework是.NET 9 项目 本机安装了Visual Studio 2022 版…...
C++从入门到实战(十六)String(中)String的常用接口(构造接口,析构接口,迭代器,遍历修改,容量管理与数据访问)
C从入门到实战(十六)String(中)详细讲解String的常用接口 前言一、std::string二、string的构造接口1. 默认构造函数:创建空字符串2. 拷贝构造函数:复制已有字符串3. 从已有字符串截取部分4. 用C风格字符串…...