精讲C++四大核心特性:内联函数加速原理、auto智能推导、范围for循环与空指针进阶
前引:在C++语言长达三十余年的演进历程中,每一次标准更新都在试图平衡性能与抽象、控制与安全之间的微妙关系。从C++11引入的"现代C++"范式开始,开发者得以在保留底层控制能力的同时,借助语言特性大幅提升代码的可维护性与安全性。本文聚焦于四个贯穿现代C++开发的核心实践——内联函数优化、auto类型推导、范围for循环遍历与nullptr空指针进阶,探讨它们如何协同构建更高效、更安全的代码体系
目录
引用结尾
传值、传指针、传引用效率的比较
引用的两大运用
(1)做参数
(2)做返回值
对引用使用的几大误解
(1)强制性转换
(2)引用的平移与缩小了解
内联函数
语法讲解
优缺点分析
面试拷问
auto关键字
语法讲解
注意
范围for循环
语法讲解
空指针进阶
语法讲解
引用结尾
传值、传指针、传引用效率的比较
以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低
以指针作为参数,传的是地址,但是有空指针的风险,但是引用不会,它必须指明对象且不会改变
在语法上引用不会开辟额外的空间,会与变量对象共用空间,但是在底层,引用是按照指针的方式来实现的,也就是会开辟空间。下面我们来看引用和指针汇编代码的对比:
引用的两大运用
(1)做参数
引用做参数我们已经很熟悉了,引用做返回值不用去拷贝参数,对于大数据提高了很明显的效率
(2)做返回值
做返回值小编需要细说,包括小编在内,开始认为引用做返回值返回的是指针,但是这是错误的
int& Func()
{int n = 0;n++;return n;
}int main()
{int ret = Func();return 0;
}
首先使用引用语法的变量类型应该是引用类型。下面我们来探讨不同返回类型与接收类型区别:
(1)如果用 int 类型的 ret 接收,那么ret 是 n 的拷贝。这句话怎么理解?看下面的代码:
通过这段代码我们就知道了!上面函数的返回类型是引用,ret 的接收其实是将引用赋值给变量
(2)如果用 int& 类型的 ret 接收,那么ret 是 n 的引用
如果 ret 的类型变成引用类型,那么 ret 就是 n 的引用,这和此图的情况是一样的
至于为何改成这两种情况对于这个函数来说都是错误的?
因为函数一旦调用完成就会销毁,第一种情况的 ret 会再次调用一个不属于它的函数 Func ;第二种情况 ret 是 n 的引用,而函数销毁,引用对象就消失了,不符合引用的语法规则
对引用使用的几大误解
(1)强制性转换
首先引用类型的变量是不能被强制性转化的额,你可以理解为它是专一的,那么我们看下面的代码
int tmp = 10;//强制性转化
double p = tmp;//引用
int& pc = tmp;
上面这种情况是符合语法的,下面这种是无法通过编译器要求:
因为发生强制性转化是会创建一个临时变量的,并不会改变数据原来的类型,例如:
(2)引用的平移与缩小了解
double tmp = 10;//引用
const int& pc = tmp;
上面的代码为什么可以运行呢?我们知道引用的类型必须和对象一致,显然不可能发生了强转,这是因为我们加了 const 修饰,无法根据 pc 对 tmp 进行修改,因此不会影响 tmp ,故没有报错
这样的例子还有很多,例如:
int& Func2()
{static int x = 0;return x;
}int& ret = Func2();//权限平移
ret 是 x 的引用 ,同时函数返回的也是引用,它们互不会被对方改变
int& Func2()
{static int x = 0;return x;
}const int& ret = Func2();//权限缩小
const 修饰之后不会通过 ret 改变 x ,因此不会对 x 产生任何影响
int Func1()
{static int x = 0;return x;
}const int& ret = Func1()//权限平移
int Func1()
{static int x = 0;return x;
}int ret = Func1();//拷贝赋值
ret 是 int 类型的变量,函数返回的也是 int 类型的数据,ret 只是 x 的拷贝
内联函数
作为编译器优化的核心手段之一,内联函数在减少函数调用开销与保持代码可读性之间开辟了第三条道路。但过度使用可能导致代码膨胀,不当使用则可能引发调试困境。我们将深入剖析内联机制的底层实现,揭示编译器决策逻辑,并通过性能对比实验展现其适用边界
语法讲解
内联函数采用关键字 inline 实现,作用是:告诉编译器尝试将函数代码直接插入到调用处
内联函数直接解决了宏的可读性差、容易出错、无法调试的问题,但是使用范围有限
例如:
优缺点分析
(1)inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会 用函数体替换函数调用
缺陷:可能会使目标文件变大,即可执行程序体积变大
优势:少了调用开销,提高程序运 行效率
(2)inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建 议:将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现)、不 是递归、且频繁调用的函数采用inline修饰,否则编译器会忽略inline特性
建议:对于比较长的函数、递归函数等,重复程度或者长度大的函数不使用内联函数
内联函数对于编译器只是一个建议,取决与否还是需要编译器自己判断
(3)inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址 了,链接就会找不到
建议:内联函数的申明和定义不要分离
例如:直接将声明和定义写在一起
面试拷问
宏的优缺点?
优点: 1.增强代码的复用性。 2.提高性能
缺点: 1.不方便调试宏。(因为预编译阶段进行了替换) 2.导致代码可读性差,可维护性差,容易误用。 3.没有类型安全的检查
C++有哪些技术替代宏?
1. 常量定义 换用 const enum
2. 短小函数定义 换用内联函数
auto关键字
当C++11赋予程序员 auto 关键字时,看似简单的类型占位符实则引发了类型系统的范式转移。从模板元编程到泛型回调,从迭代器简写到lambda表达式, auto 的合理运用能使代码简洁度提升40%以上(据CppCon 2022调研数据)。但类型擦除风险与推导陷阱始终如影随形,本文将通过典型案例解析类型退化、引用折叠等关键技术难点
语法讲解
作用:C++中的 auto 关键字用于 自动类型推导,简化代码提高可读性
例如:
auto p1 = 10;
auto p2 = 3.14;
auto p3 = 'i';
它可以根据变量自动识别类型,同时忽略引用和顶层的 const ,例如:
const auto p1 = 10;
const auto& p2 = p1;
auto* p3 = &p1;
注意
(1)auto 必须在声明时初始化,否则无法推导
auto p1;//错误:没有初始化
(2)同一个语句中 auto 必须推导为同一个类型
auto pi = 1, p2 = 2;//错误:无法推导为同一个类型
(3)不会推导数组类型,auto 会退化为指针,无法保留数组类型
int arr[] = { 1,2,3 };
auto a = arr;//错误:a的类型应该是整型指针类型,而不是整型
范围for循环
传统for循环中繁琐的迭代器操作与边界检查,曾是代码冗余与运行时错误的重灾区。范围for循环(range-based for)不仅简化了容器遍历语法,更通过 begin() / end() 协议实现了对原生数组、STL容器乃至自定义数据结构的统一访问模式。我们将解构其背后迭代表达式的控制流机制,并探讨与移动语义结合时的性能优化策略
语法讲解
auto 的高级用法就是范围for循环(适用于数组),例如:
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//范围for循环(pc是取的变量名)
for (auto pc : arr)
{//打印std::cout << pc << " ";
}
我们如果想让数组的每个成员都变成2倍,单单使用 auto 是不够的,例如:
当我们取地址之后变量的类型就变成指针类型,就可以真正的改变这个数组的成员了,例如:
//范围for循环(pc是取的变量名,改变对象需要取地址)
for (auto& pc : arr)
{//打印std::cout << (pc *= 2) << " ";
}
空指针进阶
空指针引发的段错误(SIGSEGV)长期占据C++程序崩溃原因的Top3。 nullptr 的引入不仅是语法糖,更是类型系统的重大革新——它通过引入独立的指针字面量类型,彻底消除函数重载解析歧义与隐式类型转换风险。本文将结合ASan内存检测工具,展示nullptr在复杂继承体系与模板代码中的防御性应用
语法讲解
空指针表示不指向任何有效内存地址的指针状态
在C++中我们可以使用 nullptr 代替 NULL ,例如:
(1)在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入
(2)在C++11中,sizeof(nullptr) 与 sizeof((void*)0) 所占的字节数相同
(3)为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr
例如:下面这种情况我们使用NULL可能导致函数调用判断错误
我们会误以为Func1调用第一个函数,Func2调用第二个函数,但是事实是都是调用第一个函数
因此 nullptr 解决了这个问题,我们以后尽量使用 nullptr 【注:函数使用可以不用设置变量收】
【雾非雾】,期待与你的下次相遇!
相关文章:
精讲C++四大核心特性:内联函数加速原理、auto智能推导、范围for循环与空指针进阶
前引:在C语言长达三十余年的演进历程中,每一次标准更新都在试图平衡性能与抽象、控制与安全之间的微妙关系。从C11引入的"现代C"范式开始,开发者得以在保留底层控制能力的同时,借助语言特性大幅提升代码的可维护性与安全…...
用ffmpeg压缩视频参数建议
注意:代码中的斜杠\可以删除 一、基础压缩命令(画质优先) ffmpeg -i input.mp4 \-c:v libx264 -preset slow -crf 23 \ # H.264编码,平衡速度与质量-c:a aac -b:a 128k \ # 音频压缩-vf "scaleif(gt(a,16/9),1920,-2):if(…...
uni-app学习笔记(二)--vue页面代码的构成和新建页面
vue页面的构成 一.template 模板区,主要放html布局,注意,如果是开发uni-app,模板区不要放div,h1等标签了,用了在小程序和app端起不到作用。具体应该使用哪些组件,可在uni-app官网上查看:组件-…...
机器语言程序、汇编语言程序、硬件描述语言程序、编译程序、解释程序和链接程序
程序类型定义与核心特征处理对象 / 输入输出结果所属领域典型例子 / 作用机器语言程序由二进制指令(0/1 序列)构成,可被 CPU 直接执行,与硬件架构强绑定。无(直接执行)无(直接运行)低…...
智能语音助手的未来:从交互到融合
摘要 随着人工智能技术的不断进步,智能语音助手已经成为我们生活中不可或缺的一部分。从简单的语音指令到复杂的多模态交互,语音助手正在经历一场深刻的变革。本文将探讨智能语音助手的发展历程、当前的技术瓶颈以及未来的发展方向,特别是其在…...
Redis从基础到高阶应用:核心命令解析与延迟队列、事务消息实战设计
Redis基础知识 #切换数据库 bd:0>select 2 "OK" bd:2>dbsize "0" #清空数据库 bd:0>flushdb "OK" #设置值 bd:0>set name "lyt" "OK" #查看所有key bd:0>keys *1) "name" #获取key bd:0>get …...
操作系统原理实验报告
操作系统原理课程的实验报告汇总 实验三:线程的创建与撤销 实验环境:计算机一台,内装有VC、office等软件 实验日期:2024.4.11 实验要求: 1.理解:Windows系统调用的基本概念,进程与线程的基…...
Python爬虫实战:研究nodejs aes加密
1. 引言 1.1 研究背景与意义 在当今数字化时代,Web 数据的价值日益凸显。通过爬虫技术获取公开数据并进行分析,能够为企业决策、学术研究等提供有力支持。然而,为了保护数据安全和隐私,许多网站采用了加密技术对数据进行保护,其中 AES 加密是一种常见且安全的加密算法。…...
线程的一些事(2)
在java中,线程的终止,是一种“软性”操作,必须要对应的线程配合,才能把终止落实下去 然而,系统原生的api其实还提供了,强制终止线程的操作,无论线程执行到哪,都能强行把这个线程干掉…...
基于 PostgreSQL 的 ABP vNext + ShardingCore 分库分表实战
🚀 基于 PostgreSQL 的 ABP vNext ShardingCore 分库分表实战 📑 目录 🚀 基于 PostgreSQL 的 ABP vNext ShardingCore 分库分表实战✨ 背景介绍🧱 技术选型🛠️ 环境准备✅ Docker Compose(多库 & 读…...
御网杯2025 Web,Msic,密码 WP
Web YWB_Web_xff 审计代码,发现需要$cip2.2.2.1 使用burpsuite抓包,添加X-Forwarded-For:2.2.2.1 然后得到flag YWB_Web_未授权访问 更加题目描述知道需要admin登录,但是现在是guest。 使用burpsuite抓包 发现cookie里面存在userÿ…...
tensorflow 1.x
简介 TensorFlow:2015年谷歌,支持python、C,底层是C,主要用python。支持CNN、RNN等算法,分CPU TensorFlow/GPU TensorFlow。 TensorBoard:训练中的可视化。 快捷键:shiftenter执行命令,Tab键进…...
[ERTS2012] 航天器星载软件形式化模型驱动研发 —— 对 Scade 语言本身的影响
在《从ERTS学习SCADE发展》中提到,在 ERTS 会议中,Scade团队会在该会议中介绍与Scade相关的工作。在 ERTS 2012 中,Scade 团队介绍了使用Scade作为主要工具,应用在航天器星载软件开发中的相关话题。原材料可参考 《Formal Model D…...
Spring Boot 集成 Flink CDC 实现 MySQL 到 Kafka 实时同步
Spring Boot 集成 Flink CDC 实现 MySQL 到 Kafka 实时同步 📌 项目背景 在大数据实时处理场景中,数据库变更数据的捕获与传输是关键环节。Flink CDC 提供了从 MySQL 等数据库中实时捕获数据变更的能力,并通过 Apache Flink 引擎实现流式处理。 本项目使用 Spring Boot …...
软件体系结构(Software Architecture)
文章目录 1. 分层架构(Layered Architecture)核心逻辑代码示例(伪代码)典型场景优缺点 2. 客户端-服务器(Client-Server)核心逻辑典型交互流程应用场景代码示例(RESTful API)优缺点 …...
RS485和RS232 通信配置
RS232 目前硬件上支持RS232的有以下板卡: LubanCat-5IO底板(含有RS232x2) 7.1. 引脚定义 具体的引脚定义可以参考背面的丝印 LubanCat-5IO底板 引脚定义图 7.2. 跳帽配置 LubanCat-5IO底板 鲁班买5IO底板上的RS485和RS232是共用同一组…...
【高数上册笔记篇02】:数列与函数极限
【参考资料】 同济大学《高等数学》教材樊顺厚老师B站《高等数学精讲》系列课程 (注:本笔记为个人数学复习资料,旨在通过系统化整理替代厚重教材,便于随时查阅与巩固知识要点) 仅用于个人数学复习,因为课…...
【网络安全】——大端序(Big-Endian)和小端序(Little-Endian)
字节序(Endianness)是计算机系统中多字节数据(如整数、浮点数)在内存中存储或传输时,字节排列顺序的规则。它分为两种类型:大端序(Big-Endian)和小端序…...
机器学习极简入门:从基础概念到行业应用
有监督学习(supervised learning) 让模型学习的数据包含正确答案(标签)的方法,最终模型可以对无标签的数据进行正确处理和预测,可以分为分类与回归两大类 分类问题主要是为了“尽可能分开整个数据而画线”…...
MIT XV6 - 1.5 Lab: Xv6 and Unix utilities - xargs
接上文 MIT XV6 - 1.4 Lab: Xv6 and Unix utilities - find xargs 继续实验,实验介绍和要求如下 (原文链接 译文链接) : Write a simple version of the UNIX xargs program for xv6: its arguments describe a command to run, it reads lines from the standard …...
Springboot整合Swagger3
Springboot整合Swagger3、常用注解解释、访问Swagger地址出现404、403、拒绝访问等问题_swagger3注解-CSDN博客...
经典音乐播放器——完美歌词 Poweramp Music Player 3 build
—————【下 载 地 址】——————— 【本章单下载】:https://drive.uc.cn/s/d6c480bc47604 【百款黑科技】:https://ucnygalh6wle.feishu.cn/wiki/HPQywvPc7iLZu1k0ODFcWMt2n0d?fromfrom_copylink —————【下 载 地 址】——————— 本…...
锚定基础与拥抱融合:C 语言在编程教育与技术社区的破圈之路
引言 在 Python 占据 TIOBE 指数榜首的 2025 年,C 语言以 23.4% 的稳定份额(2025 年 5 月数据)持续稳居前三,这一现象在编程教育领域尤为显著:全球 92% 的计算机科学本科课程仍将 C 语言作为必修基础课,而…...
深度学习入门:从神经网络基础到前向传播全面解析
深度学习入门:从神经网络基础到前向传播全面解析 🔥 重磅干货! 本文是《深度学习基础与核心技术详解》专栏的开篇之作,将系统性地带你走进深度学习的世界!建议收藏+关注,错过可能要找很久哦~ 目录 深度学习概述神经网络基础 2.1 生物神经元与人工神经元2.2 感知机模型2.…...
Lambda表达式能用在哪些场景?
Lambda表达式是Java 8引入的一种强大特性,它允许以简洁的方式表示匿名函数(即没有名字的函数)。Lambda表达式可以用于许多场景,尤其是在与函数式接口、Stream API、并发编程等结合时,能够显著简化代码并提高开发效率。…...
英语听力口语词汇--2.宣传类
1.approach uk /əˈprəʊtʃ/ n.(思考问题的)方式,方法,态度 2.foreign uk /ˈfɒr.ən/ adj.外国的 3.alliance uk /əˈlaɪ.əns/ n.结盟国家(或团体),同盟国家(或团体)&...
『 测试 』测试基础
文章目录 1. 调试与测试的区别2. 开发过程中的需求3. 开发模型3.1 软件的生命周期3.2 瀑布模型3.2.1 瀑布模型的特点/缺点 3.3 螺旋模型3.3.1 螺旋模型的特点/缺点 3.4 增量模型与迭代模型3.5 敏捷模型3.5.1 Scrum模型3.5.2 敏捷模型中的测试 4 测试模型4.1 V模型4.2 W模型(双V…...
Pandas 时间处理利器:to_datetime() 与 Timestamp() 深度解析
Pandas 时间处理利器:to_datetime() 与 Timestamp() 深度解析 在数据分析和处理中,时间序列数据扮演着至关重要的角色。Pandas 库凭借其强大的时间序列处理能力,成为 Python 数据分析领域的佼佼者。其中,to_datetime() 函数和 Ti…...
支持向量机的回归用法详解
支持向量机的回归用法详解 在机器学习的广阔领域中,支持向量机(SVM)是一种极具影响力的算法,它不仅在分类任务上表现出色,在回归任务中同样有着独特的应用价值。本文将深入探讨 SVM 的回归用法,包括其基本…...
计算机基础
今天不和大家分享算法了,最近为什么一直分享算法题,一个是因为最近很忙加上状态不太在线,第二个是因为我报了ICPC的比赛,也就是大学生程序设计大赛,所以平时刷算法比较多一些,虽然说结果上也没有很多的收获…...
用C语言实现的——一个支持完整增删查改功能的二叉排序树BST管理系统,通过控制台实现用户与数据结构的交互操作。
一、知识回顾 二叉排序树(Binary Search Tree,BST),又称二叉查找树或二叉搜索树,是一种特殊的二叉树数据结构。 基本性质: ①有序性 对于树中的每个节点,其左子树中所有节点的值都小于该节点的…...
uniapp-商城-53-后台 商家信息(更新修改和深浅copy)
1、概述 文章主要讨论了在数据库管理中如何处理用户上传和修改商家信息的问题,特别是通过深浅拷贝技术来确保数据更新的准确性和安全性。 首先,解释了深拷贝和浅拷贝的区别:浅拷贝使得两个变量共享相同的内存地址,而深拷贝则创建新…...
vue数据可视化开发echarts等组件、插件的使用及建议-浅看一下就行
在 Vue 项目中使用 ECharts 进行数据可视化开发时,可以结合 Vue 的响应式特性和 ECharts 的强大功能,实现动态、交互式的图表展示。 一、ECharts 基础使用 1. 安装 ECharts npm install echarts2. 在 Vue 组件中使用 ECharts <template><div…...
百度AI战略解析:文心一言与自动驾驶的双轮驱动
百度AI战略解析:文心一言与自动驾驶的双轮驱动 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 百度AI战略解析:文心一言与自动驾驶的双轮驱动摘要引言一、技术架构:大模型与自动…...
MCP Streamable HTTP 传输层的深度解析及实战分析
一、Streamable HTTP 传输层设计革新 1. 核心设计思想 协议融合:将 HTTP/1.1、HTTP/2 与 SSE 协议特性深度整合动态协商:通过 HTTP Header 实现传输协议动态协商(X-MCP-Transport)流式优先:默认启用流式传输,支持半双工通信背压控制:基于 HTTP/2 流级流量控制实现智能速…...
六大设计模式--OCP(开闭原则):构建可扩展软件的基石
写在前面:一个真实的项目悲剧 某电商平台促销功能每次迭代都需要修改核心订单类,导致: ✅ 双十一活动修改导致支付功能崩溃 ✅ 新人优惠引发会员系统连环故障 ✅ 每次发布需全量回归测试 根本原因:系统架构违反开闭原则 一、开闭…...
ActiveMQ 生产环境问题排查与调优指南(一)
一、引言 在当今复杂的分布式系统架构中,消息中间件扮演着至关重要的角色,而 ActiveMQ 作为一款广泛使用的开源消息中间件,凭借其丰富的特性、良好的稳定性和易用性,在众多企业的生产环境中占据了一席之地。它基于 JMS(…...
深入理解 JavaScript 中的 FileReader API:从理论到实践
文章目录 深入理解 JavaScript 中的 FileReader API:从理论到实践前言什么是 FileReader?核心特性 FileReader 的常用方法事件监听实际案例案例 1:读取文本文件内容案例 2:图片预览(Data URL)案例 3&#x…...
Google LLM prompt engineering(谷歌提示词工程指南)
文章目录 基本概念AI输出配置:调整AI的回答方式输出长度温度(Temperature)Top-K和Top-P 提示技术:让AI更好地理解你零样本提示(Zero-shot)少样本提示(Few-shot)系统提示(…...
前端npm包发布流程:从准备到上线的完整指南
无论是使用第三方库还是创建和分享自己的工具,npm都为我们提供了一个强大而便捷的平台,然而很多开发者在将自己的代码发布到npm上时往往面临各种困惑和挑战,本篇文章将从准备工作到发布上线,探讨如何让npm包更易发布及避免常见的坑…...
【MySQL】表空间结构 - 从何为表空间到段页详解
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
OB Cloud 云数据库V4.3:SQL +AI全新体验
OB Cloud 云数据库V4.3:SQL AI全新体验 简介 OB Cloud云数据库全新升级至V4.3版本,为用户带来了SQLAI的最新技术体验,强化数据库的传统功能,深度融合了人工智能技术,引入先进的向量检索功能和优化的SQL引擎,…...
【Linux系统】第四节—详解yum+vim
hello 我是云边有个稻草人 Linux—本节课所属专栏—欢迎订阅—持续更新中~ 目录 画板—本节课知识点详解 一、软件包管理器 1.1 什么是软件包 1.2 Linux软件⽣态 1.3 yum具体操作 【查看软件包】 【安装软件】 【卸载软件】 【注意事项】 1.4 安装源 二、vim 2.1 …...
Git的核心作用详解
一、版本控制与历史追溯 Git作为分布式版本控制系统,其核心作用是记录代码的每一次修改,形成完整的历史记录。通过快照机制,Git会保存每次提交时所有文件的完整状态(而非仅记录差异),确保开发者可以随时回…...
Three.js + React 实战系列 - 职业经历区实现解析 Experience 组件✨(互动动作 + 3D 角色 + 点击切换动画)
对个人主页设计和实现感兴趣的朋友可以订阅我的专栏哦!!谢谢大家!!! 在这篇博客中,我们将分析一个极其有趣和互动性的组件 - Experience.jsx,该组件用于在主页中呈现个人的工作经历。 这个组件…...
3D虚拟工厂vue3+three.js
1、在线体验 3D虚拟工厂在线体验 2、功能介绍 1. 全屏显示功能2. 镜头重置功能3. 企业概况信息模块4. 标签隐藏/显示功能5. 模型自动旋转功能6. 办公楼分层分解展示7. 白天/夜晚 切换8. 场景资源预加载功能9. 晴天/雨天/雾天10. 无人机视角模式11. 行人漫游视角模式12. 键盘…...
[Java实战]Spring Boot 解决跨域问题(十四)
[Java实战]Spring Boot 解决跨域问题(十四) 一、CORS 问题背景 什么是跨域问题? 当浏览器通过 JavaScript 发起跨域请求(不同协议、域名、端口)时,会触发同源策略限制,导致请求被拦截。 示例场…...
嵌入式硬件篇---CAN
文章目录 前言1. CAN协议基础1.1 物理层特性差分信号线终端电阻通信速率总线拓扑 1.2 帧类型1.3 数据帧格式 2. STM32F103RCT6的CAN硬件配置2.1 硬件连接2.2 CubeMX配置启用CAN1模式波特率引脚分配过滤器配置(可选) 3. HAL库代码实现3.1 CAN初始化3.2 发…...
(2025)图文解锁RAG从原理到代码实操,代码保证可运行
什么是RAG RAG(检索增强生成)是一种将语言模型与可搜索知识库结合的方法,主要包含以下关键步骤: 数据预处理 加载:从不同格式(PDF、Markdown等)中提取文本分块:将长文本分割成短序列(通常100-500个标记),作为检索单元…...
TWAS、GWAS、FUSION
全基因组关联研究(GWAS,Genome-Wide Association Study)是一种统计学方法,用于在全基因组水平上识别与特定性状或疾病相关的遗传变异。虽然GWAS可以识别与性状相关的遗传信号,但它并不直接揭示这些遗传变异如何影响生物…...