自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 nullptr的意义

是C++11引入的一个特殊的字面量,用于明确表示“空指针”。它的引入解决了C++中指针和空值表示的多种问题,提高了代码的安全性和可读性。的使用可能会导致模板参数的歧义,因为它们既可以被解释为整数,也可以被解释为指针。),不能隐式转换为整数类型,但可以隐式转换为任何指针类型或布尔类型。的引入使得空指针的表示更加明确,避免了与整数或其他类型的混淆。是一个整数,但它也可以被隐式转换为指针类型。在类型检查上更加严格,避免了潜在的错误。在C++11之前,空指针通常用。是一个宏,通常定义为。的引入解决了这种歧义。

2025-01-20 20:59:33 53

原创 lambda引用捕获与值捕获

在C++中,Lambda表达式是一种匿名函数对象,它可以捕获外部变量(即在Lambda表达式外部定义的变量)以便在Lambda内部使用。引用捕获是指将外部变量的引用捕获到Lambda表达式中。捕获的变量在Lambda表达式中是原始变量的别名,对捕获变量的修改会直接影响外部变量。值捕获是指将外部变量的值复制到Lambda表达式中。捕获的变量在Lambda表达式中是独立的副本,与外部变量无关。它们的区别在于捕获变量的方式和生命周期。:默认按引用捕获所有外部变量。:默认按值捕获所有外部变量。

2025-01-20 20:50:45 55

原创 std::forward实现原理与应用场景

是 C++11 引入的一个函数模板,用于实现完美转发(Perfect Forwarding)。它的核心作用是根据传入的参数,决定将参数以左值引用还是右值引用的方式进行转发,从而保持参数的原始值类别。

2025-01-20 20:39:19 120

原创 const与constexpr的区别

是C++11引入的,用于声明编译时可求值的常量表达式。它的目标是让某些表达式或变量的值在编译时被计算出来,从而提高效率并允许在编译时使用这些值。可以确保这些值在编译时被计算出来,从而完美地适配模板参数的需求。常用于需要在编译时确定的场景,如数组大小、模板参数等。变量通常会占用内存空间,即使它的值是编译时已知的。变量的值可以在运行时确定,也可以是编译时确定的。变量的值在编译时计算,通常不会占用运行时内存。模板参数通常需要在编译时确定的值,而。变量或表达式的值必须在编译时确定。用于修饰变量、函数、模板参数等。

2025-01-20 20:07:32 73

原创 std::move实现原理

std::move是 C++11 引入的一个标准库函数,它的主要作用是将一个对象转换为右值引用(rvalue reference),从而允许资源的转移(move semantics)。std::move是实现移动语义(move semantics)的核心工具之一。

2025-01-20 19:55:22 149

原创 weak_ptr的使用

是 C++ 标准库中提供的一个智能指针,用于解决之间循环引用的问题,从而避免内存泄漏。它提供了一种非拥有的、弱引用的方式指向由管理的对象。

2025-01-08 11:19:39 294

原创 std::enable_shared_from_this

这个类提供了一个成员函数,允许对象在其成员函数中安全地获取指向自身的。

2025-01-08 11:11:44 287

原创 new和make_shared创建shared_ptr的区别

new和make_shared创建shared_ptr的区别。

2025-01-08 11:06:06 201

原创 shared_ptr线程安全问题

shared_ptr线程安全

2025-01-08 11:01:53 156

原创 inline关键字

inline关键字是C++中用于指示编译器将函数的调用替换为函数体本身的一种优化手段。其目的是减少函数调用的开销,尤其是在函数体较小的情况下。使用inline关键字时,编译器会尝试将函数的定义直接嵌入到每个函数调用的地方,从而避免函数调用时的参数传递、栈帧创建和返回地址保存等开销。

2025-01-08 10:53:00 99

原创 类的初始化顺序

成员变量按照它们在类定义中声明的顺序进行初始化,而不是按照它们在构造函数初始化列表中的顺序。这意味着即使你在初始化列表中改变了顺序,实际的初始化顺序依然取决于成员变量在类体内声明的顺序。:对于类的静态成员变量,它们是在程序启动时,在任何对象创建之前就被初始化的,并且只初始化一次。静态成员变量的初始化发生在全局初始化阶段,其顺序依赖于它们在文件中的定义位置,而非类定义内的声明顺序。在C++中,类的初始化顺序遵循一定的规则,这些规则确保了程序能够以预期的方式正确初始化对象。,尽管在初始化列表中它们的顺序相反。

2024-12-29 12:12:58 143

原创 private继承与多态

在C++中,继承可以分为三种类型:public继承、protected继承和private继承。

2024-12-29 12:08:09 148

原创 RTTI:运行时类型识别

在C++中,RTTI(Run-Time Type Identification,运行时类型识别)是一种机制,它允许程序在运行时获取关于对象类型的信息。RTTI主要用于实现多态性和动态类型转换。和typeid。是用于安全的向下类型转换的运算符。它在运行时检查转换是否有效,如果转换失败,则返回空指针(对于指针类型)或抛出异常(对于引用类型)。,因为它需要运行时类型信息来确定对象的实际类型。

2024-12-29 11:53:23 175

原创 虚函数与纯虚函数

在C++中,虚函数(Virtual Function)和纯虚函数(Pure Virtual Function)是实现多态性的关键特性。它们允许在基类中定义接口,并在派生类中提供具体的实现。

2024-12-29 11:48:34 178

原创 CRTP:奇异递归模板模式

CRTP是C++中的一种模板编程惯用法,全称为Curiously Recurring Template Pattern,即奇异递归模板模式。它是一种特殊的模板技术和使用方式,主要表现为基类是一个模板类,而派生类在继承基类时,将自身作为模板参数传递给基类。

2024-12-29 11:21:14 177

原创 mutable关键字的使用

在C++编程中,const成员函数用于保证对象的恒定性,即在调用const函数时,对象的逻辑状态不会改变。然而,有时候我们需要在const函数中修改某些成员变量,这时mutable关键字就派上了用场。

2024-12-15 22:00:34 189

原创 using关键字的使用

using enum 声明引入命名枚举的枚举符名称,就像对每个枚举符使用using声明一样。当在类范围内时,using enum 声明将命名枚举的枚举符作为成员添加到作用域中,使其可用于成员查找。需要注意的是,如果没有使用using引入重载,那么上述代码将调用两次Derived::func(除非在Derived手动添加了func(double)的重写)。using作为typedef替代品的功能,它允许为现有类型创建更简洁的名字。声明来改变基类成员的可见性。比如,在私有或保护继承的情况下,可以通过。

2024-12-13 11:37:01 262

原创 空基类优化

空基类优化是指编译器在处理继承自空基类的对象布局时,不会为这些空基类分配独立的存储空间。换句话说,如果一个类继承了一个或多个没有数据成员和虚函数的空基类,则编译器会确保派生类不因为这些空基类而增大其自身的大小。这种优化不仅节省了内存,还减少了对象创建和销毁时的开销。

2024-12-11 22:42:25 173

原创 C++中extern的使用

在C++编程语言中,extern关键字用于声明变量和函数,并指示编译器这些实体是在其他地方定义的。正确理解和使用extern可以帮助开发者更好地组织代码,实现模块化编程,并确保不同源文件之间的正确链接。extern。

2024-12-10 23:46:42 390

原创 explicit的用法说明

explicit关键字有两种用途:1.指定构造函数或转换函数 (C++11起)为显式, 即它不能用于隐式转换和复制初始化。2.与常量表达式一同使用. 当该常量表达式为 true 才为显式转换(C++20起)。

2024-12-08 21:53:06 158

原创 C++简单日志

c++日志

2024-11-29 22:10:01 223

原创 V4L2采集摄像头视频

使用v4l2采集摄像头视频数据并保存文件

2024-06-23 20:01:42 569

原创 FFMpeg音频重采样原始帧与重采样的帧采样数不一致时的一些问题

设置swr_convert的out_count参数项为1024,in_count参数项设置为传入帧的采样数(该采样数与out_count不一致),导致最终保存的文件与正常情况下有出入。

2023-11-27 20:19:28 259 1

原创 RTMP协议抓包分析

RTMP(Real Time Messaging Protocol) 是由 Adobe 公司基于 Flash Player 播放器对应的音视频 flv 封装格式提出的一种,基于TCP 的数据传输协议。RTMP Client和RTMP Server的交互需要经过握手、建立连接、建立流、播放/发布四个步骤。使用wireshake抓取RTMP协议,RTMP的连接过程如上图。其中8.130.x.x为RTMP的服务器所在地址,10.177.x.x为RTMP客户端所在地址。

2023-09-06 15:39:02 621 1

原创 ffmpeg使用麦克风设备出现的问题

ffmpeg使用麦克风Could not find audio only device with name [麦克风 (Steam Streaming Microphone)] among source devices of type video.audio=麦克风 (Steam Streaming Microphone): I/O error

2023-06-06 11:02:55 2646

原创 虚拟机在nat模式下无法连接网络

主机网络可以正常ping通虚拟机的网络,但是虚拟机无法ping通主机且无法访问外网

2023-03-09 22:28:15 2573

原创 Go语言分包编程

G语言多包编程出错 go: go.mod file not found in current directory or any parent directory; see 'go help modules'

2022-11-25 16:30:59 1293

原创 c++中const引用的一些问题

c++ 常引用

2022-11-23 22:44:25 196

原创 《Linux就该这么学》学习笔记(三)

vim、shell脚本、定时任务

2022-11-11 17:22:18 528

原创 《Linux就该这么学》学习笔记(二)

管道,通配符,重定向,环境变量

2022-11-09 15:33:45 338

原创 函数中含大数组时发生段错误

函数中定义大数组出错的问题

2022-11-07 17:07:32 1015

原创 《Linux就该这么学》学习笔记(一)

linux中必备的一些命令

2022-11-07 16:27:16 731

原创 高性能服务器框架

两种高效的事件处理模式:Reactor和Proactor。同步I/O常用于实现Reactor模式,异步I/O则用于实现Proactor模式。

2022-11-03 16:09:20 122

原创 makefile的编写入门

makefile的规则、makefile的变量、makefile的函数

2022-10-09 20:28:22 631 1

空空如也

空空如也

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

TA关注的人

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