C++进阶系列
文章平均质量分 54
C++进阶系列
Android系统攻城狮
CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
展开
-
C++之realloc用法及代码实例(二百七十)
本篇目的:C++中,一个内存管理的重要函数,可以重新分配内存大小,随分享之。C++ 中的realloc函数是一个重要的内存管理函数,用于动态分配和释放内存。它可以改变已分配的内存块的大小,如果需要增加内存空间,则分配一个新的更大的内存块,然后将原内存块的内容复制到新块中,并释放原内存块。如果需要减少内存空间,则尝试将内存块的大小减少到新的大小,并返回调整后的内存块地址。realloc函数的原型为:其中,ptr是指向之前分配的内存块的指针,size是要分配的新内存块的大小(以字节为单位)。如果ptr为。原创 2024-04-08 17:02:00 · 803 阅读 · 0 评论 -
C++之链表与哈希表的作用及代码实例(二百六十九)
本篇目的:了解链表和哈希表的作用,再用C++实例说明。存储有序数据集合:链表是一种数据结构,用于存储有序的元素集合。每个元素(节点)都包含了指向下一个元素的指针,从而形成了一个有序的序列。动态内存分配:链表的节点通常可以动态分配内存,这使得链表能够在运行时动态增长和收缩,不需要预先指定存储空间的大小。插入和删除操作:链表的插入和删除操作非常高效,时间复杂度为 O(1),因为只需要修改相邻节点的指针,而不需要移动整个数据集合。实现其他数据结构:链表可以用于实现其他数据结构,如队列、栈、图的邻接表等。原创 2024-04-06 06:15:00 · 661 阅读 · 0 评论 -
C++之双向链表与哈希链表用法区别实例(二百六十八)
本篇目的:在阅读Linux内核代码时,发现Binder驱动中的双向链表和哈希链表的挺有意思,分享给大家。在Android的Binder区域中,双向链表(struct list_head)和哈希链表(struct hlist_node)是两种不同的数据结构,它们在实现中有一些区别和各自的作用。首先,让我们了解这两种数据结构的基本概念:双向链表(struct list_head)双向链表是一种数据结构,其中每个节点都包含指向前一个节点和后一个节点的指针。这使得在双向链表中,节点可以双向遍历。原创 2024-04-06 05:00:00 · 778 阅读 · 0 评论 -
C++之std::variant关键字代码实例(二百六十七)
本篇目的:C++之std::variant关键字代码实例std::variant 是 C++17 标准库中的一个模板类,它用于表示一个可以容纳多种不同类型值的类型安全的联合(union)。std::variant 提供了一种方便的方式来处理多种可能类型的值,而无需使用复杂的继承结构或联合,同时保持了类型的安全性。原创 2024-04-04 07:30:00 · 506 阅读 · 0 评论 -
C++之结构体初始化10种写法总结(二百六十六)
本篇目的:C++之结构体初始化10种方式总结。原创 2024-04-03 08:57:30 · 818 阅读 · 0 评论 -
C++之优化Linux内核结构体用智能指针std::unique_ptr与std::make_unique分配内存总结(二百六十五)
本篇目的:C++之结构体使用智能指针std::unique_ptr与std::make_unique分配内存总结在C++中,结构体(struct)是一种用户定义的数据类型,它允许我们组合多个不同类型的数据项,形成一个单一的复合数据类型。当结构体中包含动态分配的内存时,管理这些内存就变得尤为重要。std::unique_ptr和std::make_unique是C++11引入的两个智能指针工具,它们能够帮助我们自动管理这些动态分配的内存。使用std::unique_ptr管理结构体内存。原创 2024-04-02 17:27:00 · 978 阅读 · 0 评论 -
C++之智能指针std::unique_ptr与std::make_unique分配内存方式总结(二百六十四)
本篇目的:C++之智能指针分配内存方式总结std::unique_ptr和std::make_unique是C++11引入的两个重要的智能指针,它们的主要目的是自动管理动态分配的内存,防止内存泄漏,并简化资源的生命周期管理。下面是对这两个工具的详细介绍。std :: unique_ptr是一个独占所有权的智能指针。这意味着,同一时间内,只能有一个unique_ptr指向某个对象。当unique_ptr对象被销毁(例如离开作用域)时,它所指向的对象也会被自动删除。原创 2024-04-02 17:26:21 · 912 阅读 · 0 评论 -
C++之红黑树插入+查找功能实例(二百六十三)
本篇目的:C++之红黑树插入+查找实例红黑树是一种自平衡二叉查找树,它能够保持树的平衡,从而确保查找、插入和删除操作的最坏情况时间复杂度为O(log n)。红黑树通过约束节点的颜色和规则来保持平衡,这些规则包括:每个节点非红即黑。根节点是黑色的。所有叶子节点(NIL节点)是黑色的。若一个节点是红色的,则它的子节点都是黑色的。从任意节点到其每个叶子节点的所有路径都包含相同数量的黑色节点。原创 2024-03-29 10:30:21 · 736 阅读 · 0 评论 -
C++之std::atomic<bool>原子bool类型与普通bool区别(二百六十二)
本篇目的:C++之std::atomic原子bool类型与普通bool区别std::atomic 是 C++11 标准库中的一个模板特化,用于表示一个可以原子操作的布尔值。原子操作意味着这些操作是不可中断的,即在多线程环境中,当一个线程正在执行原子操作时,其他线程无法同时访问或修改这个值。与普通的 bool 类型相比,std::atomic 有以下主要区别和用途:线程安全:普通的 bool 类型不是线程安全的。原创 2024-03-28 12:04:54 · 1081 阅读 · 0 评论 -
C++之std::atomic原子量与std::mutex互斥锁解决多线程乱序问题(二百六十一)
本篇目的:C++之std::atomic原子量解决多线程乱序问题std::atomic模板类的作用:在C++ 环境中,static std::atomic是一个线程安全类型,它允许你在多线程环境中无锁地读取和修改其值。static 关键字则意味着这个变量是静态的,它会在整个程序的生命周期内存在,并且在所有对该变量的引用中共享相同的内存地址。std::atomic 是C++标准库中的一个模板类,用于表示原子类型的对象。原创 2024-03-28 11:56:06 · 842 阅读 · 0 评论 -
C++之char16_t*与char*类型相互转换(二百六十)
本篇目的:C++之char16_t与char类型相互转换char16_t 是一个在 C++11 中引入的无符号 16 位字符类型。它是一个标准类型,在头文件中定义。char16_t 设计用于存储 Unicode 字符,可以表示大多数常用字符,包括中文字符。在 C++11 之前,Unicode 字符通常使用 char 类型存储,但 char 类型是 signed char,可以表示 -128 到 127 的值,这意味着它不能正确定义许多 Unicode 字符。原创 2024-03-25 08:30:00 · 475 阅读 · 0 评论 -
C++之reinterpret_cast与static_cast用法区别(二百五十九)
本篇目的:C++之reinterpret_cast与static_cast用法区别用于执行底层的、不安全的类型转换,将一个指针转换为另一种类型的指针,或者将任何类型的指针转换为void指针。不进行类型检查,主要用于执行强制转换,潜在地导致未定义的行为。通常用于处理底层的、与内存相关的操作。总体而言:reinterpret_cast主要用于底层的、不安全的任意类型之间的转换。而static_cast用于更为安全的类型转换,确保在类型之间存在一定的关联性的类型转换:例如:父类和子类。原创 2024-03-14 08:00:00 · 603 阅读 · 0 评论 -
C++之模板类如何继承类实例(二百五十八)
本篇目的:在Android车载系统代码中,发现模板类继承类实例的例子,分享给大家。C++模板类是C++编程语言中一种特殊类型的类,它允许程序员编写可重用的代码,同时保持类型安全和灵活性。模板类是一种泛型编程的工具,它可以创建通用的类,能够处理各种数据类型。模板类的核心思想是参数化类型。在定义模板类时,程序员使用一个或多个类型参数来代替具体的类型。这些类型参数在实例化模板类时由具体的类型替代,从而使得模板类能够适用于不同的数据类型。原创 2024-02-17 18:17:36 · 983 阅读 · 0 评论 -
C++之类继承隐式转换实例(二百五十七)
本篇目的:在看Android音频混音部分时,被一个代码隐式转换搞蒙了,提取出其抽象源码,其实很简单,分享给大家。类继承是面向对象编程中的一个核心概念,它允许程序员定义一个基类(或称为父类)和从该基类派生出来的子类。子类继承父类的属性和方法,同时可以添加自己的新属性和方法。隐式转换(或称为自动类型转换)是在类继承层次结构中,子类对象可以自动地被当作父类对象使用的过程。在类继承中,子类是一种特殊的父类,即“is-a”关系。这意味着,如果一个类继承自另一个类,那么子类对象就可以被视为父类对象的一种。原创 2024-01-28 23:54:45 · 911 阅读 · 0 评论 -
C++20结构化绑定应用实例(二百五十六)
本篇目的:C++20结构化绑定应用实例。C++20 引入了一种新的特性:结构化绑定(Structured Binding),这是一种简化数组和结构体(struct)初始化的方式。结构化绑定允许你将数组或结构体的元素或成员分别绑定到新的变量名,从而使得代码更加清晰和易读。结构化绑定主要针对数组和结构体类型的初始化。当你声明一个数组或结构体变量,并给它赋初值时,你可以使用结构化绑定来将初值中的每个元素或成员分别绑定到一个新的变量名。原创 2024-01-13 23:07:35 · 1199 阅读 · 0 评论 -
C++之使用与不使用std::move区别(二百五十五)
本篇目的:理解C++之使用与不使用std::move的区别。std::move是 C++11 引入的一个函数模板,主要用于转移指针的所有权。std::move将对象的所有权从一个对象转移到另一个对象,通过将参数转换为右值引用,实现对移动语义的支持。避免不必要的拷贝:在某些情况下,可以通过使用std::move来避免不必要的拷贝操作,减少资源消耗。支持移动语义:通过使用std::move,可以明确表示对于某个对象的移动操作,以提高性能和减少内存占用。原创 2023-11-15 14:26:15 · 169 阅读 · 0 评论 -
C++之函数中实现类与调用总结(二百五十四)
本篇目的:理解C++之函数中实现类与调用实例用法public:int age;return 0;int height;return 0;return 0;原创 2023-11-08 15:36:32 · 148 阅读 · 0 评论 -
C++之回调函数使用和不使用using、typedef、function定义总结(二百五十三)
本篇目的:理解C++之回调函数不使用using、typedef、function总结1.回调函数是一种在编程中常用的设计模式,它是一种将函数作为参数传递给另一个函数的技术。这种方式允许我们在一个函数内部调用另一个函数,而这个被调用的函数是作为参数传递进来的。2.回调函数的主要用途是实现事件驱动编程和异步编程。在事件驱动编程中,当某个事件(如用户点击、网络请求完成等)发生时,会调用预先定义的回调函数来处理这个事件。原创 2023-10-29 23:10:45 · 527 阅读 · 0 评论 -
C++之Args可变参数模板总结(二百五十二)
本篇目的:理解C++之Args可变参数模板用法。C++中,Args是一个通用的模板参数,用于表示一个参数包。它可以用于函数模板、类模板以及其他支持模板参数的上下文中。1. **函数模板参数包Args是一个通用的模板参数,用于表示一个参数包。它可以用于函数模板、类模板以及其他支持模板参数的上下文中,用于接受任意数量的参数或多个类型参数。通过使用参数包展开的方式,可以在模板中处理不定数量的参数或多个类型参数。原创 2023-10-29 22:23:33 · 552 阅读 · 0 评论 -
C++之C++11引入enum class与传统enum关键字区别总结(二百五十一)
本篇目的:理解C++之lambda匿名函数、typedef、using等用法C++11引入的enum class关键字来定义枚举传统的enum关键字定义枚举作用范围:enum class创建了一个作用域限定的枚举类型,而enum则创建了一个隐式的全局作用域枚举类型。这意味着使用enum class定义的枚举成员在枚举之外是不可见的,需要通过作用域解析运算符(::)来访问。默认类型安全性:enum class提供了更严格的类型安全性,不允许隐式的整数转换。原创 2023-10-29 18:04:30 · 299 阅读 · 0 评论 -
C++之左值、右值、std::forward、std::move总结(二百五十)
本篇目的:理解C++之lambda匿名函数、typedef、using等用法C++中的左值(lvalue)和右值(rvalue)是表达式的属性,用于表示它们在赋值操作中的行为和特性。左值(lvalue)表示一个可以标识内存位置的表达式,它可以出现在赋值语句的左边或右边。左值可以被引用(可以取得其地址)并且在程序的生命周期中保持稳定。简而言之,左值可以出现在等号左边或右边,并且在其他表达式中可以被引用。右值(rvalue)表示一个临时的、无法标识内存位置的表达式,它只能出现在赋值语句的右边。原创 2023-10-28 22:08:27 · 297 阅读 · 0 评论 -
C++之lambda匿名、using、typedef总结【全】(二百四十九)
本篇目的:理解C++之lambda匿名函数、typedef、using等用法Lambda函数是一种匿名函数,可以在C++中使用。它提供了一种简洁的方式来定义和使用临时的函数对象。Lambda函数通过使用方便的语法来简化函数对象的创建过程,使代码更加简洁和易读。Capture列表:指定Lambda函数所捕获的外部变量。它可以是值捕获(通过值进行拷贝)或引用捕获(通过引用进行访问)的方式。参数列表:指定Lambda函数的参数。返回类型:指定Lambda函数的返回类型(可以省略,编译器会自动推断)。原创 2023-10-28 11:13:42 · 173 阅读 · 0 评论 -
C++之C++11字符串字面量后缀总结(二百四十八)
本篇目的:理解C++11字符串字面量后缀总结。C++11引入了字符串字面量后缀,可以用于在字符串字面量的末尾添加后缀以指定其类型。这样做的好处是增强了类型安全性,使得字符串字面量可以根据后缀的类型进行解析和处理。以下是一些常用的字符串字面量后缀:后缀"s":用于表示字符串字面量,其类型为。例如:"hello"s表示类型为的字符串。后缀"u8":用于表示UTF-8字符串字面量,其类型为。例如:"你好"u8表示类型为的UTF-8字符串。后缀"u":用于表示宽字符字符串字面量,其类型为。原创 2023-10-26 17:48:41 · 277 阅读 · 0 评论 -
C++之#pragma once实例总结(二百四十七)
本篇目的:理解C++之#pragma once用法总结。#pragma once是一种预处理指令,用于告诉编译器在编译过程中只包含一次特定的头文件。它是一种非标准的C++语言扩展,主要用于避免头文件被重复包含。在C++中,头文件经常被用来包含代码的声明或定义,然后在其他源文件中进行引用。当多个源文件都包含同一个头文件时,如果没有适当的预处理指令,会导致重复定义和编译错误。原创 2023-10-26 17:13:11 · 279 阅读 · 0 评论 -
C++之Linux syscall实例总结(二百四十六)
本篇目的:理解Linux的syscall作用和用法。Linux的系统调用(System Call,简称syscall)是用户态程序与内核态之间进行交互的重要接口。通过系统调用,用户程序可以请求操作系统内核提供的特权功能,例如文件操作、进程管理、网络通信等。Linux系统中的系统调用通常采用软中断的方式实现。当用户程序需要使用系统调用时,它会通过指令将处理器从用户态切换到内核态,并触发软中断异常。操作系统内核会根据中断号(系统调用号)来确定需要执行的系统调用函数,进行相应的处理,然后返回结果给用户程序。原创 2023-10-26 14:39:49 · 395 阅读 · 0 评论 -
C++之lambda匿名函数总结(二百四十五)
本篇目的:理解C++之lambda匿名函数用法总结。Lambda函数是C++11引入的一种匿名函数的方式,它可以在需要函数对象的地方快速定义一个临时的函数。Lambda函数的语法相对简洁,可以方便地捕获局部变量,并且可以作为参数传递给其他函数。// 函数体其中,capture是指捕获的变量列表,可以是空的、值传递方式或引用传递方式。parameters是形参列表,可以为空或包含一个或多个形参。是返回类型,可以省略(根据函数体自动推断)或明确指定。函数体是具体的函数实现。原创 2023-10-25 20:38:54 · 470 阅读 · 0 评论 -
C++之struct匿名结构体实例(二百四十四)
本篇目的:理解C++之struct匿名结构体用法。C++中的“匿名结构体”通常也被称为“无名结构体”或“未命名结构体”,是指在结构体定义时没有给予其一个特定的名称。它与普通的有名结构体相比,在语法上有一些差异和特殊用法。匿名结构体和有名结构体的定义语法相同,都是使用struct关键字,但不提供名称。定义匿名结构体主要用于临时的数据组织和封装,通常作为其他数据类型(如类、其他结构体)的成员。} student;在上述代码中,我们使用匿名结构体定义了一个名为。原创 2023-10-22 01:03:40 · 719 阅读 · 0 评论 -
C++之委托构造函数实例(二百四十三)
本篇目的:理解C++之委托构造函数用法。委托构造函数是C++11引入的一个特性,允许某个构造函数在初始化列表中调用同一个类中的其他构造函数。这样可以避免代码重复,提高代码的可维护性和重用性。在C++中,一个类可以有多个构造函数,每个构造函数负责初始化对象的不同部分或者提供不同的参数选项。在某些情况下,多个构造函数会有一些共同的初始化代码,这就会导致代码冗余。委托构造函数解决了这个问题,让一个构造函数可以重用其他构造函数的初始化代码。原创 2023-10-14 00:22:47 · 245 阅读 · 0 评论 -
C++之make_unique、namespace、class类总结(二百四十二)
本篇目的:理解C++之make_unique、namespace、class类用法。是 C++14 中引入的一个函数模板,用于创建一个独占所有权的智能指针(它可以动态分配内存并初始化对象,并且在构造函数抛出异常时自动释放内存,从而避免了内存泄漏的风险。函数接受构造函数参数并返回包含该对象的unique_ptr。使用可以简化动态内存分配的过程,并提高代码的安全性。namespace:命名空间是一种将全局作用域分割为不同部分的机制,以避免命名冲突。命名空间可以包含变量、函数、类和其他命名空间。原创 2023-10-13 17:29:32 · 292 阅读 · 0 评论 -
C++之容器类有趣的实验(二百四十一)
本篇目的:理解C++之向容器中添加nullptr空指针,容器size()会增大吗?为什么?通过C++的20个容器类进行实验,看看有什么结果?C++提供了多种容器,以下是常用的20个容器及其举例:数组 (array):固定大小的连续存储空间。例如:int numbers[5] = {1, 2, 3, 4, 5}。向量 (vector):可变大小的动态数组。例如:vector numbers = {1, 2, 3, 4, 5}。列表 (list):双向链表。原创 2023-09-29 00:30:27 · 205 阅读 · 0 评论 -
C++之std::atomic解决多线程7个问题(二百四)
本篇目的:理解C++之std::atomic原子操作解决多线程竟态问题用法。原创 2023-09-27 17:12:53 · 338 阅读 · 0 评论 -
C++之std::atomic类模板原子操作应用总结(二百三十九)
本篇目的:理解C++之std::atomic模板类函数load、store、exchange、increment、decrement、fetch_add、fetch_sub、fetch_and、fetch_or、fetch_xor用法。模板类的成员函数(load、store、exchange、increment、decrement、fetch_add、fetch_sub、fetch_and、fetch_or、fetch_xor)的实现原理是通过使用硬件级别的支持或者特殊的指令集来实现的。原创 2023-09-27 16:48:49 · 321 阅读 · 0 评论 -
C++之std::function类模板定义函数对象应用总结(二百三十八)
本篇目的:理解C++之functional应用。C++中的functional库提供了一种通用的方式来接收任意可调用对象,包括函数指针、函数对象、Lambda表达式等函数对象是指能像函数一样被调用的对象。functional头文件中提供了几个常用的函数对象,如std::bind等。是一个通用的函数封装器,类似于函数指针,可以用来包装任意可调用的目标,如普通函数、函数指针、成员函数、lambda表达式等。通过,我们可以将函数对象作为一个参数传递给其他函数或者保存它们在容器中。std::bind。原创 2023-09-26 01:59:59 · 234 阅读 · 0 评论 -
C++之list成员函数应用总结(二百三十七)
本篇目的:理解C++之list成员函数应用。C++中的std::list是一个双向链表的容器,它提供了许多成员函数用于对链表进行操作。以下是一些常用的std::list成员函数的列表:list():默认构造函数。list(const list& other):拷贝构造函数。list(size_type count, const T& value):构造函数,创建包含count个值为value的元素的链表。begin():返回指向链表第一个元素的迭代器。原创 2023-09-25 11:05:24 · 1161 阅读 · 0 评论 -
C++之lseek64应用总结(二百三十六)
本篇目的:理解C++之lseek64用法。lseek64是一个系统调用函数,用于在文件中定位文件指针的位置。它的目的是允许程序随机地访问文件,并在不同位置进行读取或写入操作。lseek64fd:文件描述符,用于标识要进行操作的文件。offset:指定了相对于whence参数中位置的位移量。whence:指定了定位的参考位置,可以是以下值之一:SEEK_SET:从文件开头开始计算偏移量。SEEK_CUR:以当前文件指针位置为参考点计算偏移量。SEEK_END:从文件末尾开始计算偏移量。原创 2023-09-24 22:39:21 · 392 阅读 · 0 评论 -
C++之内部类实现总结(二百三十五)
本篇目的:理解C++之内部类实现总结。嵌套类是定义在外部类中的类。内部类可以访问外部类的成员,而外部类也可以访问内部类的成员。嵌套类的作用域仅限于外部类,并且可以通过外部类名来访问。原创 2023-09-24 19:25:16 · 172 阅读 · 0 评论 -
C++之指向引用的指针和指向指针的引用总结(二百三十四)
本篇目的:理解C++之指向引用的指针和指向指针的引用。原创 2023-09-24 01:49:26 · 190 阅读 · 0 评论 -
C++之传指针、引用、vector<shared_ptr<string>>应用总结(二百三十三)
本篇目的:理解C++之传指针、引用、vector用法。原创 2023-09-24 01:07:09 · 479 阅读 · 0 评论 -
C++之decltype类型推导、模板参数的默认类型、模板类型转换总结(二百三十二)
本篇目的:理解C++之decltype类型推倒、模板类型转换用法。C++中的decltype是一个用于推导表达式类型的关键字。。它会根据变量的初始化表达式推导出变量的类型。int x = 5;// 推导出y的类型为int。它会根据表达式推导结果的类型。int x = 5;// 推导出y的类型为int,因为x + 1 的结果是int型decltype的实现原理是通过编译时的类型推导来确定表达式的类型。在编译过程中,编译器会分析表达式,并根据表达式的结构和操作数的类型来推断出表达式的类型。原创 2023-09-23 13:55:17 · 206 阅读 · 0 评论 -
C++之mutex、operator()、lambda应用总结(二百三十一)
本篇目的:理解C++之mutex互斥量与lambda函数应用总结。原创 2023-09-22 13:11:48 · 169 阅读 · 0 评论