自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 深入理解 Git 底层机制:指针(Refs)、提交(Commit)与分支的关系

Refs 是 Git 中用来指向某个 commit 的“指针”,本质上是存储在.git/refs目录下的文本文件,内容是 commit 的哈希值。分支(branch):存在,例如文件里存的就是 master 分支当前指向的提交哈希。标签(tag):存在,比如v1.0标签指向某个稳定的提交。远程分支(remote-tracking branch):存在,如指向远程仓库的 master 分支当前的提交。merge-base指的是两个提交的“最近共同祖先”(lowest common ancestor)

2025-05-30 15:55:53 993

原创 编解码器vs容器

【代码】编解码器vs容器。

2025-04-17 14:15:10 764

原创 【C++】多线程编程大礼包

参数传递1. 传值线程函数 拷贝 传入的参数适用于 基本数据类型 或者 小对象,不会影响原变量避免数据竞争,但可能有性能开销三次构造一次构造两次构造4. 右值引用(std::move)线程函数 接管资源,主线程变量可能失效适用于 大对象,防止不必要的拷贝5. 使用 lambda 捕获线程函数可以 直接访问外部变量适用于 简单的逻辑,不需要额外的参数传递6. 类成员函数作为线程函数需要传递 对象指针,否则 指针丢失为什么 是必须的?成员函数指针 和

2025-04-05 19:52:40 1260

原创 C++ atomic 原子操作

在多线程编程中,通常我们需要多个线程共享数据。但如果不加以控制,多个线程同时访问同一数据,可能会导致数据不一致或竞争条件(race conditions)。为了解决这个问题,我们引入了。

2025-04-05 18:38:00 1377

原创 async、future、shared_future、promise、packaged_task练习题目

std::async编写一个程序,使用std::async启动一个异步任务,该任务计算两个整数的和。主线程等待任务完成并输出结果。

2025-04-05 15:41:50 762

原创 C++异常处理 throw try catch

C++ 异常处理机制提供了一种在程序运行时捕获错误或异常情况的方式。异常处理的目的是使得程序在遇到错误时能够优雅地终止或恢复,并防止程序出现崩溃。C++ 使用trythrow, 和catch关键字来实现异常处理。C++ 标准库定义了一些通用的异常类,它们位于头文件中。这些异常类帮助程序员识别和处理不同类型的错误。C++ 标准库异常类通常都继承自,这是所有标准异常类的基类。

2025-04-05 14:50:07 1558

原创 future、shared_future、packaged_task、promise常用接口总结

用于异步获取任务的结果,结果只能被获取一次。对象不可复制,但可移动。

2025-04-05 11:03:59 625

原创 关于 `std::packaged_task` 的总结

是一个模板类,用于包装一个可调用对象(比如函数、lambda 表达式等)。是一个包装器,能够异步执行某个任务,并提供结果的获取机制。对象,允许你从任务中获取结果。你需要进行以下几个步骤来使用。

2025-04-04 21:35:21 329

原创 单例模式(懒汉模式/饿汉模式)

【代码】单例模式(懒汉模式/饿汉模式)

2025-03-31 16:17:56 389

原创 C++ MySQL 常用接口(基于 MySQL Connector/C++)

即使程序崩溃,数据也已经修改了。用于创建 MySQL 连接对象。创建一个 SQL 语句执行对象。如果希望多个 SQL 语句。获取查询结果,并读取列值。释放资源,避免内存泄漏。MySQL 默认启用。指定要操作的数据库。

2025-03-08 15:15:49 822

原创 SQL 注入 (C++向)

预处理语句(Prepared Statement)可以。,攻击者通过在输入字段中注入恶意 SQL 代码,来。,从而窃取数据、修改数据,甚至破坏数据库。,这样才能从根本上防止 SQL 注入!即使攻击者获得了访问权限,也应该。,攻击者可以直接绕过登录验证。否则攻击者可以通过错误信息。SQL 注入是一种常见的。(阻止恶意 SQL 语句),攻击者就能获取整个。

2025-03-07 20:55:51 986

原创 C++ using 关键字总结(对比 typedef)

是 C++11 引入的关键字,可用于。更清晰、功能更强大。

2025-03-06 18:31:12 490

原创 C++ 文件操作接口表格总结

这张表涵盖了 C++ 文件操作的核心 API,让你可以快速查阅常用的文件流操作!C++ 文件操作接口主要来自。

2025-03-05 10:58:14 178

转载 C\C++ 编程中:相对路径 + 绝对路径

电脑硬盘E盘下,建文件夹“test”,"test"下建立子文件夹“file”,"file"下建子文件夹“data”,./data/xxx 表示当前路径的下下一级路径,相当于 E:\test\file\data\xxx。./data 表示当前路径下一级路径,相当于E:\test\file\data。./ 表示当前路径,相当于E:\test\file。../ 表示当前路径的上一级路径,相当于E:\test。或者,当前路径E:\test\file下,相对路径表示为。更多指向上级路径的表示以此类推。

2025-03-05 09:15:12 127

原创 C++ JSON库的使用示例

你可以直接复制这段代码,运行看看!

2025-03-04 15:33:17 977

原创 std::allocator_traits 能做但 std::allocator 不能的事情

仍然在某些简单场景下可用,但现代 C++ 开发。在现代 C++ 中,某些分配器需要支持。如果你希望 STL 容器可以使用你的。,而 STL 容器默认使用的是。假设你要实现一个内存池。

2025-03-02 22:29:05 474

原创 C++多态基本介绍

的名字相同,但参数列表不同,编译器根据参数类型和数量来选择正确的函数。类的操作符行为,使其更直观。,可以让不同的对象有不同的表现形式。(OOP)的核心特性之一,指的是。,在运行时动态决定调用哪个函数。模板支持泛型编程,在。

2025-03-02 12:52:12 389

转载 【C++】深入理解C++虚函数与纯虚函数

虚函数是在基类中使用关键字virtual声明的成员函数,它允许派生类对其进行重写(Override),实现运行时多态。当通过基类指针或引用调用虚函数时,实际调用的是对象类型对应的派生类中的函数,这个过程称为动态绑定(Dynamic Binding)或晚绑定(Late Binding)。虚函数重写指的是派生类中提供一个函数版本,该版本与基类中具有相同名称、相同返回类型和相同参数列表的虚函数相匹配。通过这种方式,派生类可以提供自己特定的实现,替换或扩展基类的行为。

2025-03-01 21:54:32 732

原创 C++ 通过基类的指针或引用调用派生类的重写方法

调用派生类的重写方法,而不需要知道具体的派生类类型。来操作派生类对象,从而在运行时调用。,这提高了代码的可扩展性和灵活性。而不是基类引用/指针,那么即使。可以写出更灵活、可扩展的代码!,这样就能在运行时调用派生类的。C++ 的多态性允许我们使用。函数中,我们可以创建 Dog。(slicing),只保留了。类似地,我们也可以使用。在 C++ 中,通过。

2025-03-01 20:27:07 480

原创 C++ final和override

final用来禁止继承或者禁止重写虚函数。用于类时防止继承,用于函数时防止重写。override用来明确标识子类函数是重写父类的虚函数,它能帮助编译器检查函数是否正确覆盖了父类的虚函数。如果你在编码时使用这两个关键字,不仅可以提升代码的安全性和清晰度,还能减少潜在的错误,确保继承和重写的正确性。

2025-03-01 20:01:17 445

原创 SslConnection::SslConnection()详解

🚀。

2025-02-28 19:49:00 985

原创 Muduo + OpenSSL 网络交互完整流程

确保数据加密,并建立 SSL 安全通道。来处理 TLS/SSL 加密。也可以按照相同的方式给。整个流程设计合理,兼顾了。

2025-02-28 19:35:48 1499

原创 OpenSSL 基础使用流程

理解 OpenSSL 的基础使用流程是学习如何进行安全通信的关键,特别是在实现 SSL/TLS 连接时。以下是 OpenSSL 基础使用流程的一个简要总结,并附上一个简单的示例代码,帮助你理解如何通过 OpenSSL 建立一个基本的安全通信连接。

2025-02-28 16:51:44 1035

原创 C/C++ 中的链接属性

外部链接是指某个符号(如变量或函数)可以在多个源文件中共享,链接器会将这些符号解析到同一个内存地址,从而在不同的源文件之间访问和使用它。内部链接的符号只能在当前源文件内部使用,不能被其他源文件访问。也就是说,符号仅在声明它的源文件内可见,其他文件无法引用。无链接的符号只能在当前代码块(通常是函数或代码块)内使用,不能被其他函数或代码块访问。无链接的符号是完全局部的,不会被链接器处理。外部 C 链接的符号与外部链接类似,可以在不同的源文件之间共享,并且在整个程序执行期间可见。

2025-02-27 20:36:44 1117

原创 编译和链接

编译(Compilation)包括预处理、编译和汇编三个阶段,生成.o目标文件。目标文件是机器代码的片段,但不能单独运行。链接(Linking)将多个目标文件和库文件链接起来,生成可执行文件。包括静态链接和动态链接两种方式。链接器负责符号解析和地址重定位,使得程序可以完整运行。通常情况下,执行gcc命令时,会自动执行编译和链接两个阶段。预处理并编译main.c和utils.c,生成main.o和utils.o目标文件。将生成的目标文件main.o和utils.o。

2025-02-27 20:20:54 1029

原创 C++ 智能指针 unique_ptr shared_ptr weak_ptr小练习

智能指针是 C++11 引入的一项重要特性,它可以帮助我们管理动态分配的内存,自动释放内存,避免内存泄漏和悬空指针的问题。为了帮助你熟悉智能指针的使用,下面是一些练习题,涵盖了智能指针的基本用法以及一些常见的应用场景。的基本概念、引用计数、资源管理,以及如何避免常见的内存管理问题(如循环引用)。永远无法释放内存,因为它们互相引用,引用计数始终大于 0。允许传入自定义的删除器,用来控制资源的释放方式。,模拟一个循环引用的情况,并展示为什么会导致内存泄漏。指向同一内存时,引用计数的变化。来管理一个动态分配的。

2025-02-22 20:59:41 553

转载 C++ std::function与std::bind

当 std::function 对象实例未包含任何实际可调用实体时,调用该 std::function 对象实例将抛出 std::bad_function_call 异常。std::function 是一个函数包装器,该函数包装器模板能包装任何类型的可调用实体,如普通函数,函数对象,lamda 表达式等。由上文可以看出:由于可调用对象的定义方式比较多,但是函数的调用方式较为类似,因此需要使用一个统一的方式保存可调用对象或者传递可调用对象。具体的内容会在下文讲解。这里的函数指的是普通函数,没什么可拓展的。

2025-02-22 19:43:56 38

原创 C++ bind基本使用

内部通过封装和转换可调用对象(如函数、lambda 或成员函数等)为函数对象,可能带来一定的性能开销。的作用是“绑定”一个函数或函数对象的部分参数,生成一个新的函数对象。这个新的函数对象可以接受剩余的参数,并将其与已经绑定的参数一起传递给原函数。是 C++11 引入的一个函数模板,用于创建一个新的可调用对象,该对象可以调用某个函数或成员函数,并将一些参数绑定为固定值。,你可以创建一个新的函数对象,这个对象可以接受剩余的参数,并与之前绑定的参数一起调用原函数。等占位符,这些占位符将被替换为调用时传入的参数。

2025-02-22 17:32:30 492

原创 完美转发使用

一个参数,保持参数原本的值类别(左值或右值)。它“向前”转发参数,就像把参数从一个函数“传递”到另一个函数。这使得它能“转发”参数并保持原始类型的属性,不会做多余的修改。有时你可能希望通过完美转发将引用类型的参数转发给另一个函数。的命名源于它的用途——“转发”一个参数。我会通过几个具体的例子进一步帮助你理解完美转发的概念,并且解释一下。首先,我们先来一个简单的完美转发的例子,展示如何使用。的命名非常直观,因为它的作用是“移动”资源。保证保持参数的原始类型(左值或右值)。的命名则代表“保持原样,准确转发”。

2025-02-20 22:44:52 448

原创 C++ 模板 简单易懂

或 std::string。有时候,函数/类的参数个数。但如果想存 double。,一个模板搞定所有情况!,让你学得轻松又扎实!没有参数,终止递归。

2025-02-20 22:26:22 413

原创 C++深拷贝\浅拷贝

浅拷贝:只复制对象的值,对于指针成员,复制的是指针的地址,导致多个对象共享相同的内存。深拷贝:复制对象的值,对于指针成员,重新分配内存并复制数据,确保每个对象有独立的内存,避免了资源共享的问题。为了避免浅拷贝带来的问题,特别是当对象中有动态分配的内存时,通常需要自己定义深拷贝构造函数。同时,还需要实现赋值操作符重载,以确保在对象赋值时,拷贝也是深拷贝。int *age;num = n;*age = a;// 深拷贝构造函数// 赋值操作符重载(深拷贝)

2025-02-20 19:57:27 428

原创 C++ using的用法

在 C++ 中,类成员(特别是继承自基类的成员)默认是不可访问的,如果你想让派生类访问基类的某些成员,可以使用。能够帮助我们在代码中减少冗余,增加灵活性,尤其在处理复杂类型时,能使代码更加简洁明了。可以用来为模板定义别名,使模板的使用更加简洁,尤其是对于泛型编程和标准库类型的使用。关键字是 C++11 引入的一项强大特性,它可以用于。更简洁且更强大,尤其是在模板类型别名中。为代码提供了更多的灵活性和可读性。功能相似,但语法上更简洁和直观。可以用来创建类型别名,通常与。都可以用来定义类型别名,但。

2025-02-19 16:48:19 632

原创 回调函数(Callback Function)

在 C++ 中,回调函数通常指一个函数作为参数传递到另一个函数中,当某个事件发生时,被调用的函数会“回调”传入的函数。回调函数就是一个通过参数传递到其他函数中的函数,通常由目标函数在某个特定时机被调用。回调函数是一种允许你将函数作为参数传递的机制,通常用于实现灵活的事件处理、异步操作和函数封装。你可以通过传入回调函数的方式,在数据到达时执行回调。Lambda 表达式是 C++11 引入的匿名函数,具有简洁的语法和强大的功能,尤其适合用作回调函数。通过函数对象,可以更加灵活地定义回调函数,并且可以持有状态。

2025-02-19 16:30:31 1298

原创 <functional>的使用详解

C++ 能够支持类似于现代编程语言中的高阶函数、回调和 lambda 表达式等特性,为你的代码提供更大的灵活性和扩展性!库中最核心的部分,它提供了一种通用的方式来存储和调用任何类型的可调用对象,包括普通函数、成员函数、lambda 表达式、函数对象等。是一个函数模板,它可以将成员函数包装成函数对象,之后可以像调用普通函数一样调用成员函数。是一个模板类,用于存储任意类型的函数或可调用对象,具有一致的调用接口。用于绑定函数的参数,它可以预先提供部分参数,返回一个新的可调用对象。让我们能够更加灵活地处理。

2025-02-19 16:25:30 1300

原创 path pathParameter queryParameter分别是哪些部分

在 URL 中的位置和作用。希望这个解释能帮到你!(•̀ ω •́)✧。在这个例子中,并没有路径参数,所以。是一个路径参数,表示用户 ID。通过这些例子,你应该能清楚地看到。就是路径部分,表示你访问的是。就是路径部分,表示访问的是。路径,并且有一个动态的部分。是路径部分,表示你访问的是。是路径参数,表示用户 ID。定位到特定用户 ID 为。(假设这是用户 ID)。问号后面的是查询参数,问号后面的是查询参数,问号后面的是查询参数,

2025-02-19 15:38:20 318

原创 如何使用 muduo::net::Buffer 类的常用接口

类提供了一些非常实用的接口来管理和操作缓冲区的数据。常见的接口如peek()和retrieve()提供了对缓冲区中数据的查看和提取功能;而findCRLF()append()等方法则帮助我们更有效地处理网络数据流和报文解析。这些接口的名称都非常直观,符合其功能目的,通常用于高效地管理数据流、避免重复读取、并根据需要处理网络报文。

2025-02-18 22:38:24 542

原创 C++ string常见用法

提供了丰富的接口来处理字符串,包括初始化、修改、查找、比较等功能。了解并熟练掌握这些接口,可以大大提高你的 C++ 编程效率。

2025-02-18 21:48:44 788

原创 C++ const关键字详解

const关键字的基本作用:确保变量的值不可修改,提供编译时的检查。常量值:在变量、指针、成员函数等多个地方使用,保证不改变数据的状态。常量引用:避免大对象的拷贝,且保证对象在函数内部不被修改。常量指针与指向常量的指针:分别表示指针不可修改和指针指向的内容不可修改。const是 C++ 中的基础但非常强大的特性,它能有效地提高代码的可读性、稳定性,减少错误,并且在性能优化方面发挥作用。

2025-02-18 21:44:12 623

原创 C++ static 关键字详解

静态局部变量:在函数中声明,具有类的生命周期,但作用域仅限于函数内。用于在函数调用之间保存值。静态成员变量:属于类本身的变量,而不是类的实例。它在所有对象之间共享。静态成员函数:属于类本身的函数,不能访问实例的成员,只能访问静态成员。静态全局变量:限制在当前文件内部可见,防止与其他文件中的同名变量冲突。静态常量:用于在类中定义常量,不需要每个对象存储一份副本。static是 C++ 中一种非常有用的特性,它帮助管理类级别的状态、控制变量的生命周期,并且防止在多个文件中发生命名冲突。

2025-02-18 21:40:28 702

原创 Muduo常用接口

Muduo 是一个基于 C++ 的高性能、非阻塞 I/O 的网络库,主要用于处理高并发的网络通信。它封装了 Linux 上的 epoll 和 pthread,实现了事件驱动的网络编程模型。Muduo 的设计理念是将网络 I/O 与业务逻辑解耦,通过 Reactor 模型来管理 I/O 事件。在 Muduo 中,主要有以下几类接口和类: 是 Muduo 的核心类之一,它代表了一个事件循环。每个线程都有一个 ,并且每个 负责处理自己的 I/O 事件和定时器。2. TcpServer 是 Muduo

2025-02-18 19:27:33 1527

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除