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

C++23 Lambda 表达式上的属性:P2173R1 深度解析

文章目录

    • 一、背景与动机
      • (一)Lambda 表达式的发展历程
      • (二)属性的重要性
      • (三)P2173R1 提案的动机
    • 二、语法与使用
      • (一)属性的放置位置
        • 1. 普通 Lambda 表达式
        • 2. 泛型 Lambda 表达式
        • 3. 多个属性
      • (二)支持的属性类型
      • (三)属性的作用范围
    • 三、实际应用场景
      • (一)防止返回值被忽略
      • (二)标记已弃用的 Lambda 表达式
      • (三)优化内存顺序
    • 四、编译器支持与实践
      • (一)主流编译器的支持情况
      • (二)实际项目中的应用建议
        • 1. 使用 `[[nodiscard]]` 防止错误
        • 2. 标记已弃用的 Lambda 表达式
        • 3. 注意属性的语义
        • 4. 结合静态分析工具
    • 五、总结

C++23 标准的发布为开发者带来了诸多令人兴奋的新特性,其中对 Lambda 表达式的支持尤为值得关注。特别是 P2173R1 提案,它允许在 Lambda 表达式上使用属性,这一改进不仅提升了 Lambda 表达式的灵活性,还增强了代码的语义表达能力。本文将深入探讨这一特性,从背景、语法、实际应用到编译器支持等多个方面进行详细解析。

一、背景与动机

(一)Lambda 表达式的发展历程

Lambda 表达式最早在 C++11 中引入,它允许开发者以一种简洁的方式定义匿名函数对象。这种特性极大地简化了代码,尤其是在需要传递简单函数逻辑时。例如,在标准库的算法中,Lambda 表达式可以作为回调函数,用于自定义排序、过滤等操作。

std::vector<int> vec = {1, 2, 3, 4, 5};
std::sort(vec.begin(), vec.end(), [](int a, int b) { return a > b; });

然而,C++11 到 C++20 的 Lambda 表达式在某些方面仍然存在限制,特别是在属性支持方面。

(二)属性的重要性

属性(Attributes)是 C++ 中用于为代码元素(如函数、类、变量等)提供额外语义信息的机制。它们可以帮助编译器更好地理解代码意图,从而进行优化或发出警告。例如,[[nodiscard]] 属性用于指示函数返回值不应被忽略,[[deprecated]] 属性用于标记已被弃用的函数。

在 C++23 之前,Lambda 表达式无法直接使用这些属性。这导致了一些问题。例如,如果 Lambda 表达式包装了一个 [[noreturn]] 的函数,编译器无法正确推断其行为,可能会导致警告或错误。

(三)P2173R1 提案的动机

P2173R1 提案的核心动机是解决 Lambda 表达式在属性支持方面的不足。该提案的目标是让 Lambda 表达式能够像普通函数对象一样使用属性,从而提升代码的可读性和安全性。

二、语法与使用

(一)属性的放置位置

根据 P2173R1 提案,属性可以放置在 Lambda 表达式的捕获列表之后,或者模板参数列表之后(如果 Lambda 表达式是泛型 Lambda)。以下是几种常见的语法示例:

1. 普通 Lambda 表达式
auto lambda = [] [[nodiscard]] (int x) { return x + 1; };

在这个例子中,[[nodiscard]] 属性被放置在捕获列表之后,表示调用该 Lambda 表达式时,其返回值不应被忽略。

2. 泛型 Lambda 表达式
auto generic_lambda = []<typename T> [[nodiscard]] (T x) { return x + 1; };

对于泛型 Lambda 表达式,属性可以放置在模板参数列表之后。

3. 多个属性

Lambda 表达式可以同时使用多个属性,例如:

auto lambda = [] [[nodiscard]] [[deprecated]] (int x) { return x + 1; };

(二)支持的属性类型

P2173R1 提案允许在 Lambda 表达式上使用所有标准属性,包括但不限于:

  • [[nodiscard]]:表示 Lambda 表达式的返回值不应被忽略。
  • [[deprecated]]:表示该 Lambda 表达式已被弃用,建议使用其他替代方案。
  • [[noreturn]]:表示 Lambda 表达式不会返回,例如包装了一个 std::exitstd::throw 的调用。
  • [[carries_dependency]]:表示 Lambda 表达式可能携带依赖关系,用于优化内存顺序。

此外,还可以使用自定义属性。例如:

auto lambda = [] [[nodiscard]] [[my_custom_attribute]] (int x) { return x + 1; };

(三)属性的作用范围

属性的作用范围取决于其具体类型。例如,[[nodiscard]] 属性会影响 Lambda 表达式的调用者,如果调用者忽略了返回值,编译器会发出警告。而 [[deprecated]] 属性则会在 Lambda 表达式被调用时发出警告,提示开发者该 Lambda 表达式已被弃用。

三、实际应用场景

(一)防止返回值被忽略

[[nodiscard]] 属性是 Lambda 表达式上属性支持的一个典型应用场景。在实际开发中,许多函数的返回值具有重要意义,例如错误码或计算结果。如果调用者忽略了这些返回值,可能会导致程序逻辑错误。

例如,以下代码展示了如何使用 [[nodiscard]] 属性来防止返回值被忽略:

auto compute_value = [] [[nodiscard]] (int x, int y) { return x + y; };int main() {compute_value(10, 20);  // 编译器会发出警告,因为返回值被忽略了return 0;
}

在这个例子中,由于 Lambda 表达式被标记为 [[nodiscard]],编译器会在调用 compute_value 时检查其返回值是否被使用。如果返回值被忽略,编译器会发出警告,提示开发者注意。

(二)标记已弃用的 Lambda 表达式

[[deprecated]] 属性可以用于标记已被弃用的 Lambda 表达式。这在代码维护过程中非常有用,尤其是当需要逐步淘汰某些功能时。

例如:

auto old_lambda = [] [[deprecated]] (int x) { return x + 1; };int main() {int result = old_lambda(10);  // 编译器会发出警告,提示该 Lambda 表达式已被弃用return 0;
}

在这个例子中,old_lambda 被标记为 [[deprecated]],当调用该 Lambda 表达式时,编译器会发出警告,提示开发者该 Lambda 表达式已被弃用,建议使用其他替代方案。

(三)优化内存顺序

[[carries_dependency]] 属性可以用于优化内存顺序。当 Lambda 表达式可能携带依赖关系时,使用该属性可以帮助编译器更好地优化代码。

例如:

auto lambda = [] [[carries_dependency]] (int x) { return x + 1; };

在这个例子中,[[carries_dependency]] 属性告诉编译器该 Lambda 表达式可能携带依赖关系,编译器可以据此进行优化。

四、编译器支持与实践

(一)主流编译器的支持情况

目前,主流的 C++ 编译器(如 GCC 和 Clang)已经实现了 P2173R1 提案中关于 Lambda 表达式上属性支持的特性。这意味着开发者可以在实际项目中使用这些新特性,以提升代码的可读性和安全性。

例如,在 GCC 13 及以上版本中,可以正常编译并使用带有属性的 Lambda 表达式。以下是一个简单的测试代码:

#include <iostream>int main() {auto lambda = [] [[nodiscard]] (int x) { return x + 1; };int result = lambda(10);std::cout << "Result: " << result << std::endl;return 0;
}

在编译时,如果调用 lambda 而不使用其返回值,GCC 会发出警告:

warning: ignoring return value of 'int ()(int)', declared with attribute 'nodiscard' [-Wunused-result]

这表明编译器正确地处理了 [[nodiscard]] 属性。

(二)实际项目中的应用建议

在实际项目中,合理使用 Lambda 表达式上的属性可以带来诸多好处。以下是一些应用建议:

1. 使用 [[nodiscard]] 防止错误

对于那些返回值具有重要意义的 Lambda 表达式,建议使用 [[nodiscard]] 属性。这可以防止调用者忽略返回值,从而减少潜在的错误。

2. 标记已弃用的 Lambda 表达式

如果某些 Lambda 表达式已被弃用,建议使用 [[deprecated]] 属性进行标记。这可以帮助其他开发者了解代码的维护状态,避免使用已被淘汰的功能。

3. 注意属性的语义

在使用属性时,需要注意其语义。例如,[[noreturn]] 属性表示 Lambda 表达式不会返回,因此不能在该 Lambda 表达式中使用返回值。

4. 结合静态分析工具

除了编译器的警告机制,还可以结合静态分析工具(如 Clang-Tidy 或 Cppcheck)来进一步检查代码中对 Lambda 表达式属性的使用情况。这些工具可以帮助开发者发现潜在的问题,并提供更详细的分析报告。

五、总结

C++23 的 P2173R1 提案为 Lambda 表达式带来了属性支持,这一改进不仅让 Lambda 表达式更加灵活,还增强了代码的语义表达能力。通过在 Lambda 表达式上使用属性,开发者可以更好地表达代码意图,防止潜在错误,并优化代码性能。

在实际开发中,合理使用 Lambda 表达式上的属性可以提升代码的可读性和安全性。随着 C++23 的普及,这一特性将为开发者提供更多工具,以编写更高效、更可靠的代码。

相关文章:

C++23 Lambda 表达式上的属性:P2173R1 深度解析

文章目录 一、背景与动机&#xff08;一&#xff09;Lambda 表达式的发展历程&#xff08;二&#xff09;属性的重要性&#xff08;三&#xff09;P2173R1 提案的动机 二、语法与使用&#xff08;一&#xff09;属性的放置位置1. 普通 Lambda 表达式2. 泛型 Lambda 表达式3. 多…...

libaom 码率控制实验:从理论到实践的深度探索

libaom 码率控制模式介绍 在 libaom 中定义了四种码率控制模式&#xff0c;分别是 VBR、CBR、CQ、Q&#xff1b;枚举类型会被用在编码器配置结构体 aom_codec_enc_cfg 中&#xff0c;通过 rc_end_usage 字段来设置编码器的码率控制策略。具体应用范围如下&#xff1a; AOM_VBR…...

golang的slice扩容过程

Go 语言中的切片扩容机制是 Go 运行时的一个关键部分&#xff0c;它确保切片在动态增加元素时能够高效地管理内存。这个机制是在 Go 运行时内部实现的&#xff0c;涉及了内存分配、数据拷贝和容量调整。扩容的实现主要体现在 runtime.growslice 函数中。下面我们将深入分析 Go …...

MCP 集合网站

分享个超全 MCP 网站&#xff0c;以后找资源不用愁&#xff0c;不谢。 MCPServers | Model Context Protocol Implementation | MCPServers.cnMCPServers - Model Context Protocol Servers for AI model serving. The official platform for MCP, MCPServer, and Model Contex…...

C++: Initialization and References to const 初始化和常引用

cpp primer 5e, P97. 理解 这是一段很容易被忽略、 但是又非常重要的内容。 In 2.3.1 (p. 51) we noted that there are two exceptions to the rule that the type of a reference must match the type of the object to which it refers. The first exception is that we …...

ES通过API操作索引库

1. 导入restClient依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.12.1</version></dependency> 2. 了解ES核心客户端API 核心区别…...

MySQL:存储函数和存储过程

系列文章目录 1.MySQL编程基础 2.程序控制流语句 3.存储过程 4.游标 5.嵌入式SQL 文章目录 系列文章目录前言一、程序控制流语句&#xff1a;二、存储函数&#xff1a; 1.存储函数的特点&#xff1a;2.存储函数的定义&#xff1a;3.调用存储函数 三、存储过程&#xff1a;…...

visual studio安装字体

以下是在 Windows 系统中将 Visual Studio 字体更换为 JetBrains 字体&#xff08;如 JetBrains Mono&#xff09;的完整指南&#xff0c;涵盖从下载安装到高级优化的全流程&#xff1a; 一、下载并安装 JetBrains 字体 获取字体文件 访问 JetBrains Mono 官方下载页面&#x…...

网络安全·第四天·扫描工具Nmap的运用

今天我们要介绍网络安全中常用的一种扫描工具Nmap&#xff0c;它被设计用来快速扫描大型网络&#xff0c;主要功能包括主机探测、端口扫描以及版本检测&#xff0c;小编将在下文详细介绍Nmap相应的命令。 Nmap的下载安装地址为&#xff1a;Nmap: the Network Mapper - Free Se…...

SSM考研助手管理系统

&#x1f345;点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345; 项目视频 03…...

通道注意力机制|Channel Attention Neural Network

一、通道注意力机制 论文&#xff1a;ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks 近年来&#xff0c;通道注意力机制在提高深度卷积神经网络CNN的性能方面显示出了巨大潜力。然而&#xff0c;大多数现有方法致力于开发更复杂的注意力模块…...

844. 比较含退格的字符串

给定 s 和 t 两个字符串&#xff0c;当它们分别被输入到空白的文本编辑器后&#xff0c;如果两者相等&#xff0c;返回 true 。# 代表退格字符。 注意&#xff1a;如果对空文本输入退格字符&#xff0c;文本继续为空。 示例 1&#xff1a; 输入&#xff1a;s "ab#c&quo…...

trl的安装与单GPU多GPU测试

文章目录 0 相关资料1 源码安装2 Qwen2.5-0.5B-Instruct 模型下载3 训练demo4 在多个 GPU/节点上进行训练总结 0 相关资料 https://github.com/huggingface/trl https://blog.csdn.net/weixin_42486623/article/details/134326187 TRL 是一个先进的库&#xff0c;专为训练后基…...

Java项目之基于ssm的学校小卖部收银系统(源码+文档)

项目简介 学校小卖部收银系统实现了以下功能&#xff1a; 学校小卖部收银系统的主要使用者分为&#xff1a; 管理员&#xff1b;管理员使用本系统涉到的功能主要有&#xff1a;主页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;员工管理&#xff0c;商品分类管理&am…...

ES DSL 常用修改语句

字段值替换修改 修改sql update zyzkwjj set dhreplace(dh,"WS","WSS") where dh like %WS% update zyzkwjj set dh replace(dh, WS, DZ),ztm replace(ztm, WS, DZ),zrz replace(zrz, WS, DZ) where dh like %WS% or ztm like %WS% or zrz like %WS%…...

数据结构*集合框架顺序表-ArrayList

集合框架 常见的集合框架 什么是顺序表 顺序表是一种线性表数据结构&#xff0c;它借助一组连续的存储单元来依次存储线性表中的数据元素。一般情况下采用数组存储。 在数组上完成数据的增删查改。 自定义简易版的顺序表 代码展示&#xff1a; public interface IArray…...

(二)Graspnet在mujoco的仿真复现(操作记录)

目录 《复现的项目来源》 一、创建虚拟环境 二、下载manipulator_grasp项目 三、配置环境 1、基于graspnet-baseline项目进行开发 &#xff08;1&#xff09;下载 graspnet-baseline项目 &#xff08;2&#xff09;修改graspnet-baseline的requirements.txt&#xff0c;…...

黑马商城项目(一)MybatisPlus

一、快速入门 入门案例&#xff1a; 常见注解&#xff1a; 常见配置&#xff1a; 条件构造器(wrapper)&#xff1a; 案例&#xff1a; Testvoid testUpdateByWrapper(){List<Long> ids List.of(1L,2L,3L);UpdateWrapper<User> userUpdateWrapper new UpdateWrapp…...

Linux系统编程 day2

系统调用 由操作系统实现并提供给外部应用程序的编程接口(API)。是应用程序同系统之间数据交换的桥梁。 文件IO 函数 open/close函数 头文件 #include<fcntl.h> #include<unistd.h>int open(const char*pathname , int flags) int open(const char*pathname , …...

告别繁琐,拥抱简洁:初识 Pytest 与环境搭建 (Pytest系列之一)

在 Python 自动化测试领域&#xff0c;Pytest以其简洁、灵活和强大的特性&#xff0c;越来越受到广大测试工程师和开发者的青睐。如果你还在为繁琐的测试框架而苦恼&#xff0c;或者希望提升你的 Python 测试效率&#xff0c;那么 Pytest 绝对值得你深入了解和使用。 本文将带…...

浏览器运行Pytorch无法启用显卡

注意 我启用高性能之后&#xff0c;结果蓝屏了。无语Thinkpad T14p&#xff01;&#xff01;&#xff01; 仅供参考。 问题与方案 在浏览器里面用Jupyter编写python程序&#xff0c;进行网络模型训练。 里面导入了PyTorch&#xff0c;但是并没有启用显卡执行&#xff1a; 也…...

天元证券|8家汽车零部件上市公司一季度业绩预喜

近日&#xff0c;中国汽车工业协会发布的数据显示&#xff0c;今年一季度&#xff0c;我国汽车产量为756.1万辆&#xff0c;同比增长14.5%&#xff1b;汽车销量为747万辆&#xff0c;同比增长11.2%。 受益于前三个月汽车产、销量同比双增&#xff0c;上游产业链公司交出了一份可…...

C语言学习之sizeof函数和strlen函数

经过我们之前的学习&#xff0c;已经接触过很多次sizeof函数和strlen函数了&#xff0c;应用他们来求解数组大小等等。但是实际应用中两者的差别还是很大的&#xff0c;接下来我们就来了解一下吧。 sizeof函数 sizeof函数计算的是变量所占内存空间的大小的&#xff0c;单位是字…...

从 “经验养生” 到 “数据养生”:智慧养老如何终结 “伪科学”?

在养老养生领域&#xff0c;长期以来 “经验养生” 占据主导地位&#xff0c;各种未经科学验证的说法和做法流传甚广&#xff0c;其中不乏 “伪科学” 内容&#xff0c;给老年人的健康和生活带来诸多误导。 随着智慧养老的兴起&#xff0c;“数据养生” 模式逐渐崭露头角&…...

什么是跨域问题以及其解决方案

一、什么是跨域&#xff1f; 1.1. 什么是同源策略&#xff1f;1.2. 同源策略限制以下几种行为 二、常见的跨域场景三、9种跨域解决方案 1. JSONP跨域 1.1. 原生JS实现1.2. jquery Ajax实现1.3. Vue axios实现 2. CORS 跨域资源共享 &#xff08;前端不需要做任何改变&#xff0…...

Go之Slice和数组:深入理解底层设计与最佳实践

在Go语言中&#xff0c;数组&#xff08;Array&#xff09;和切片&#xff08;Slice&#xff09;是两种看似相似却本质不同的数据结构。本文将深入剖析它们的底层实现机制&#xff0c;并结合实际代码示例&#xff0c;帮助开发者掌握核心差异和使用场景。 一、基础概念&#xff…...

快速部署大模型 Openwebui + Ollama + deepSeek-R1模型

背景 本文主要快速部署一个带有web可交互界面的大模型的应用&#xff0c;主要用于开发测试节点&#xff0c;其中涉及到的三个组件为 open-webui Ollama deepSeek开放平台 首先 Ollama 是一个开源的本地化大模型部署工具,提供与OpenAI兼容的Api接口&#xff0c;可以快速的运…...

RF connect SDK 修改蓝牙address的方法

目录 概述 1 静态设置蓝牙地址&#xff08;编译时配置&#xff09; 1.1 通过 prj.conf 文件设置 1.2 通过 overlay 文件设置 2 动态修改蓝牙地址&#xff08;运行时修改&#xff09; 2.1 使用 bt_addr_le_t 结构 2.2 使用 bt_set_id_addr&#xff08;适用于 Public Add…...

MuJoCo(Multi-Joint Dynamics with Contact)机器人仿真器存在的问题

MuJoCo物理引擎计算接触力的核心思路&#xff0c;是通过数学优化的方式同时满足多个物理约束&#xff0c;而不是简单地为每个碰撞点单独计算作用力。它的工作流程可以理解为几个阶段的紧密配合。首先&#xff0c;仿真器会快速检测所有可能发生接触的物体表面&#xff0c;筛选出…...

IDEA远程Debug调试

最近开发一个功能&#xff0c;因为环境问题&#xff0c;本地无法正常将多个微服务都启动成功。 另外接手了一个新活&#xff0c; 逻辑比较复杂&#xff0c;需要去研究一下测试一下原来的功能逻辑。方便找到新任务功能点的切入点。这才了解到Idea远程debug调试的功能。 本文章…...

爱普生有源晶振SG2016VHN在网络服务器中的应用

在数字化浪潮席卷全球的当下&#xff0c;网络服务器作为数据存储、处理与传输的核心枢纽&#xff0c;其性能的稳定与高效直接关系到整个网络生态的正常运转。从企业内部的数据管理&#xff0c;到互联网服务提供商的大规模数据运算&#xff0c;网络服务器需要应对海量数据的高速…...

【差分隐私相关概念】瑞丽差分隐私(RDP)命题2

分步解析与答案 1. c-稳定变换的定义 c-稳定变换是一种将群体数据集&#xff08;如数据库集合&#xff09;的相邻性映射到个体数据集&#xff08;如单条记录变化&#xff09;的变换。具体来说&#xff0c;若变换 g : D ′ → D g: \mathcal{D} \to \mathcal{D} g:D′→D 是 …...

大前端基础学习

一、cs架构和bs架构 c&#xff1a;客户端&#xff0c; b&#xff1a;浏览器&#xff08;无需安装&#xff0c;无需更新&#xff0c;可跨平台&#xff09;√ s&#xff1a;server服务端&#xff0c;帮我们保 存信息&#xff0c;传递信息 二、 altshift向下键向下复制一行 …...

Spring Batch 专题系列(四):配置与调度 Spring Batch 作业

1. 引言 在上一篇文章中,我们详细探讨了 Spring Batch 的核心组件(Job、Step、Chunk、ItemReader、ItemProcessor、ItemWriter),并通过示例展示了它们的协作方式。掌握了这些组件后,接下来需要了解如何灵活配置 Spring Batch 作业,并通过调度机制控制作业的执行时机。本…...

Android 项目配置文件解释

Android 项目配置文件解释 目录 Android 项目配置文件解释1. `plugins` 块2. `android` 块3. `dependencies` 块为什么需要 JDK 和 Kotlin1. plugins 块 plugins {id com.android.applicationid org.jetbrains.kotlin.android }id com.android.application:应用 Android 应用…...

uniapp 自定义tabbar

v3 写法 <template><view class"" v-if"Data.imgurl"><view class"tabbars" ref"tabbars" id"tabbars"><view class"flex jsa"><view class"tabbarc_li" click"go(/p…...

C++高级2 智能指针

智能指针介绍 裸指针 int * p new int(10); *p 30; delete p; 必须要手动释放 智能指针 保证能做到资源的自动释放&#xff0c;利用栈上的对象出作用域自动析构的特征&#xff0c;来做到资源的自动释放的 实现一个简单的智能指针 class Cptr { public:Cptr(T* ptr …...

【FPGA】——DDS信号发生器设计

目录 一 、IP核的使用 &#xff08;1)RAM IP核 (2)FIFO IP核 二、DDS信号发生器设计 &#xff08;1&#xff09;代码 &#xff08;2&#xff09;仿真波形 一 、IP核的使用 IP核&#xff1a;ASIC或FPGA中预先设计好具有某种功能的电路模块&#xff0c;参数可修改&#xf…...

mysql按条件三表并联查询

下面为你呈现一个 MySQL 按条件三表并联查询的示例。假定有三个表&#xff1a;students、courses 和 enrollments&#xff0c;它们的结构和关联如下&#xff1a; students 表&#xff1a;包含学生的基本信息&#xff0c;有 student_id 和 student_name 等字段。courses 表&…...

centos 7 docker创建的postgres数据库状态检查

一 、打开finalshell 连接主机 二、检查docker状态,以下信息表示数据库准备好连接了 注意:当finalshell可以访问主机,但没有准备信息时,重启centos系统试试 docker logs postgres 三、如果是传统安装 基于 systemd 的系统(如 CentOS 7 及以上、Ubuntu 16.04 及以…...

基于EasyX库开发的球球大作战游戏

目录 球球大作战 一、开发环境 二、流程图预览 三、代码逻辑 1、初始化时间 2、设置开始界面大小 3、设置开始界面 4、让玩家选择速度 5、设置玩家小球、人机小球、食物的属性 6、一次性把图绘制到界面里 7、进入死循环 8、移动玩家小球 9、移动人机 10、食物刷新…...

ES和MySQL概念对比

基本概念 ES和MySQL都属于数据库&#xff0c;不过各有各的特性&#xff0c;大致使用方法与MySQL类似并无区别。 MySQL&#xff1a;擅长事务持有ACID的特性&#xff0c;确保数据的一致性和安全。 ES&#xff1a;持有倒排索引&#xff0c;适合海量数据搜索和分析。 ES和MySQL如何…...

Kotlin 与 Jetpack Compose 参数设计完全指南

作为 Kotlin 和 Jetpack Compose 开发者&#xff0c;合理的参数设计能显著提升代码的可读性和易用性。本文将系统整理各类参数规则&#xff0c;帮助您编写更优雅的 API。 一、基础参数规则 1. 方法参数 // 基础定义 fun 方法名(必需参数: 类型, 可选参数: 类型 默认值): 返…...

dea如何使用git

在 IntelliJ IDEA 中使用 Git 的详细步骤如下&#xff0c;分为配置、基础操作和高级功能&#xff0c;适合新手快速上手&#xff1a; ​一、配置 Git​ ​安装 Git​ 下载并安装 Git&#xff0c;安装时勾选“Add to PATH”。验证安装&#xff1a;终端输入 git --version 显示版本…...

git -- 版本控制介绍(分布式系统),git介绍(对待数据的方式,本地执行,保证完整性,只添加数据,git文件/项目的三种状态,基本的工作流程)

目录 版本控制 介绍 分布式版本控制系统 git 介绍 与多个远程仓库协作 对待数据的方式 本地执行操作 保证完整性 只添加数据 三种状态 工作区 暂存区 Git 目录 基本的git工作流程 版本控制 介绍 一种记录一个或多个文件内容变化的系统&#xff0c;它可以让你在未来…...

嵌入式软件OTA升级,有哪几种Flash划分方式?

第一次接触嵌入式软件OTA升级的时候&#xff0c;我整个人也是懵的。Flash划分&#xff1f;什么鬼&#xff1f;不是直接把新程序烧进去就完事了吗&#xff1f; 结果一上手才发现&#xff0c;这玩意没那么简单&#xff0c;尤其是Flash怎么分&#xff0c;如果Flash划分没弄好&…...

游戏引擎学习第226天

引言&#xff0c;计划 我们目前的目标是开始构建“元游戏”结构。所谓元游戏&#xff0c;指的是不直接属于核心玩法本身&#xff0c;但又是游戏体验不可或缺的一部分&#xff0c;比如主菜单、标题画面、存档选择、选项设置、过场动画等。我们正在慢慢将这些系统结构搭建起来。…...

通过python实现bilibili缓存视频转为mp4格式

需要提前下好ffmpeg import os import fnmatch import subprocess Bilibili缓存的视频&#xff0c;*280.m4s结尾的是音频文件&#xff0c;*050.m4s结尾的是视频&#xff0c;删除16进制下前9个0&#xff0c;即为正常音/视频 使用os.walk模块&#xff0c;遍历每一个目录&#xf…...

Windows 图形显示驱动开发-WDDM 1.2功能—无显示器系统支持

一、架构设计与启动流程 1.1无显示器系统启动与全流程 graph TDA[UEFI固件] -->|FADT.VGA_NOT_PRESENT1| B[Windows Boot Manager]B -->|加载winload.efi| C[内核初始化]C -->|检测显示设备| D{存在GPU?}D -->|是| E[加载WDDM驱动]D -->|否| F[激活MSBDD虚拟…...

低代码 Web 组态

低代码配置式 Web 组态是一种用于创建 Web 应用程序界面的技术&#xff0c;它允许用户通过图形化界面和少量的代码或无需编写大量代码来配置和定制 Web 页面的布局、外观和交互功能。 一、特点 1、低代码或无代码开发&#xff1a;大大降低了开发门槛&#xff0c;无需专业的编程…...