build_embed_linux_system

cplusplus_application

综述

C++是支持多范式不同实践的语言,往往很多应用也仅仅是C++的实践的一小部分。在学习C++的过程中,保持着好奇心,结合规范和实践,通过积累总结逐渐扩展对C++的认知,这也是这个工程的由来。本系列主要用于C++的学习,包含基础应用,也有扩展和参考各工具书的学习实践。可以把本系列当作C++学习中的目录指引,遇到不理解的概念,可以参考相应例程去了解,也可以参考相关资料进行说明。

本系列中大部分例程都是单项目文件,可以直接在线运行。

配合例程地址:C++项目语法整理

本项目的参考资料和书籍如下。

目录

C++知识点总结

c_style

兼容C的语法包含关键字, 函数,循环,数组和指针等, 这部分建议阅读《C Primer Plus》。

__STDC__          //当编译器与C99标准兼容时,该宏被定义为1
__STDC_HOSTED__   //当编译器与C99标准兼容时,该宏被定义为1
__func__          //该宏被定义为当前函数的名称
__FILE__          //该宏被定义为当前文件的名称
__LINE__          //该宏被定义为当前行的行号
__DATE__          //该宏被定义为当前日期
__TIME__          //该宏被定义为当前时间
__cplusplus       //该宏被定义为199711L
__VA_ARGS__       //是一个预处理器宏,表示变长参数

namespace

命名空间(namespace)是C++中用于解决命名冲突的一种机制

  1. 命名空间的定义格式
  2. 命名空间的嵌套, 嵌套命名空间是指在一个命名空间内部再定义一个命名空间
  3. 内联命名空间, 内联命名空间是指在C++17及以上版本中,可以使用inline关键字来定义一个内联命名空间
  4. using关键字,用于声明使用命名空间

reference

引用是C++中一种特殊的变量类型,它可以看作是一个变量的别名。

class

在C++中,类是一种用户定义的数据类型,它封装了数据和操作这些数据的函数。类是面向对象编程的基本构建块,它允许你将数据和操作这些数据的函数组合在一起,形成一个逻辑单元,类的相关知识点如下所示。

  1. 类的封装和权限控制(private、protected、public)
  2. 类的构造函数,包含默认构造函数,拷贝构造函数,移动构造函数,删除构造函数,显示构造函数,委托构造函数,继承构造函数
  3. 类的析构函数,包含默认析构函数,删除析构函数
  4. 友元函数和友元类,友元函数和友元类可以访问类的所有成员
  5. 类的运算符重载operator
  6. 类的继承和权限控制(private、protected、public)
  7. 多重继承和虚继承
  8. const和mutable在类中的运用
  9. 虚函数,纯虚函数,接口类
  10. 多态,静态多态和动态多态
  11. 动态绑定,虚函数表和虚函数指针
  12. final和override关键字
  13. 类的重写,重载和隐藏,重载的编译器原理
  14. 列表初始化,非静态成员的立即初始化,std::initializer_list
  15. 静态数据成员,静态函数和单例模式,静态数据成员的inline初始化
  16. 非静态数据成员的sizeof
  17. RAII(Resource Acquisition is initialization)
  18. 强枚举类型(enum class)
  19. 非受限联合体(union)
  20. 函数的局部类,允许定义函数内部的类

template

模板,是一种泛型编程的工具,它允许程序员编写通用的代码,而不是针对特定的数据类型。

  1. 模板类型分为函数模板,类模板,变量模板,别名模板(using声明)
  2. 模板参数类型,可以分为类型模板(typename、class)和非类型模板(整型、指针、引用、枚举)。
  3. class和typename都可以用来声明类型模板参数,相同点和区别
  4. 可变参数模板是一种特殊的模板,它允许你在模板中使用可变数量的参数,sizeof…用于查询参数数目
  5. 模板的特化和偏特化
  6. 默认模板参数:是指在模板定义中为模板参数提供一个默认值。
  7. ADL查找规则,ADL(Argument-Dependent Lookup)
  8. 用户自定义推导指引(User-Defined Deduction Guides),它允许程序员为类模板的构造函数提供自定义的类型推导规则
  9. SFINAE(Substitution Failure Is Not An Error)用于在编译时根据模板参数的类型来选择不同的函数重载或模板特化
  10. 外部模板(Explicit Template Instantiation)是C++中的一个特性,它允许程序员在一个编译单元中显式地实例化一个模板
  11. 模板元编程是一种编程范式,它使用模板来编写程序,在编译时进行计算和生成代码

stl

STL(Standard Template Library)是C++标准库的一部分,它提供了一组通用的容器、算法和函数,用于处理数据结构和算法的实现。

容器

  1. array:固定大小的数组,提供了边界检查和随机访问功能
  2. deque:双端队列,支持在两端进行高效的插入和删除操作
  3. forward_list:单向链表,支持在链表头部进行高效的插入和删除操作
  4. list:双向链表,支持在链表任意位置进行高效的插入和删除操作
  5. map:关联容器,存储键值对,按键进行排序
  6. multimap:关联容器,存储键值对,按键进行排序
  7. multiset: 关联容器,存储唯一的元素,按键进行排序
  8. priority_queue:优先队列,支持按照优先级进行元素的插入和删除操作
  9. queue:队列,遵循先进先出(FIFO)原则
  10. set:关联容器,存储唯一的元素,按键进行排序
  11. stack:栈,遵循后进先出(LIFO)原则
  12. unordered_map:无序关联容器,存储键值对,不进行排序
  13. unordered_multimap:无序关联容器,存储键值对,不进行排序
  14. unordered_multiset:无序关联容器,存储唯一的元素,不进行排序
  15. unordered_set:无序关联容器,存储唯一的元素,不进行排序
  16. vector:动态数组,支持随机访问和高效的尾部插入和删除操作

迭代器

  1. 正向迭代器(iterator):可以向前遍历容器中的元素
  2. 反向迭代器(reverse_iterator):可以向后遍历容器中的元素
  3. 常量正向迭代器(const_iterator):只能读取容器中的元素,不能修改
  4. 常量反向迭代器(const_reverse_iterator):只能读取容器中的元素,不能修改

算法

  1. 查找算法:find, find_if, find_first_of, find_end, search, search_n
  2. 排序算法:sort, stable_sort, partial_sort, partial_sort_copy, nth_element
  3. 变换算法:transform, replace, replace_if, replace_copy, replace_copy_if
  4. 计数算法:count, count_if, accumulate, inner_product, partial_sum, adjacent_difference
  5. 比较算法:equal, mismatch, lexicographical_compare
  6. 生成算法:generate, generate_n, fill, fill_n, copy, copy_n, copy_if, copy_backward
  7. 移除算法:remove, remove_if, remove_copy, remove_copy_if, unique, unique_copy
  8. 分割算法:partition, stable_partition, partition_copy, partition_point
  9. 归并算法:merge, inplace_merge, set_union, set_intersection, set_difference, set_symmetric_difference
  10. 堆算法:push_heap, pop_heap, make_heap, sort_heap

std

C++标准库是C++编程语言的一部分,它提供了一组通用的类和函数,用于处理各种常见的编程任务。标准库被组织成多个头文件,每个头文件包含一组相关的功能。以下是一些主要的C++标准库组件。

exception

C++ 异常处理(exception)是一种机制,用于在程序运行时处理错误和异常情况。它允许程序在遇到错误时抛出异常,并在适当的地方捕获和处理这些异常,从而避免程序崩溃或产生不可预测的行为。

layout

C++的内存布局是指在内存中如何组织和存储对象、变量和函数等,这里主要指类的内存布局。

  1. 平凡类型,平凡类型(Trivial Type)指的是那些可以通过简单的内存拷贝(如 memcpy)进行复制,并且在复制过程中不会有任何特殊行为(如调用构造函数或析构函数)的类型
  2. 平凡可复制类型(Trivially Copyable Type)指的是那些可以通过简单的内存拷贝进行复制,并且在复制过程中不会有任何特殊行为的类型
  3. 标准布局类型(Standard Layout Type)指的是那些具有特定标准布局的类型
  4. 聚合类型(Aggregate Type)指的是那些可以通过简单的初始化列表进行初始化的类型
  5. POD类型(Plain Old Data Type,POD)指的是满足平凡和标准布局的类型
  6. 虚表和类的内存布局
  7. 数据对齐(alignas和alignof),alignas和alignof是C++11引入的关键字,用于指定类型的对齐方式。alignas用于指定类型的对齐方式,alignof用于获取类型的对齐方式。

smart_pointer

智能指针是C++中的一种特殊类型的指针,它提供了自动内存管理的功能。智能指针通过在对象不再被使用时自动释放其所指向的内存,从而避免了内存泄漏的问题。C++标准库提供了三种主要的智能指针:unique_ptr、shared_ptr和weak_ptr。

  1. unique_ptr:是一种独占所有权的智能指针,它确保同一时间只有一个unique_ptr指向某个对象。当unique_ptr被销毁时,它所指向的对象也会被自动删除
  2. shared_ptr:是一种共享所有权的智能指针,它允许多个shared_ptr指向同一个对象。当最后一个指向对象的shared_ptr被销毁时,对象才会被自动删除
  3. enable_shared_from_this: 用于在shared_ptr中创建指向当前对象的shared_ptr
  4. weak_ptr:是一种弱引用的智能指针,它不拥有对象的所有权,而是指向一个shared_ptr所管理的对象。当最后一个指向对象的shared_ptr被销毁时,weak_ptr会自动失效

type_conversion

  1. RTTI(Run-Time Type Information):运行时类型信息,它是一种机制,允许程序在运行时获取对象的类型信息
  2. typeid返回一个std::type_info对象,该对象包含了对象的类型信息
  3. 隐式转换和显示标识符(explicit),隐式转换是指在不需要显式类型转换操作符的情况下,编译器自动将一种类型的值转换为另一种类型的值。显式标识符(explicit)是一个关键字,用于修饰类的构造函数。当构造函数被声明为显式时,编译器将禁止隐式转换,即禁止使用单个参数的构造函数进行隐式类型转换。
  4. dynamic_cast:用于在运行时进行类型转换,它可以将一个指向基类的指针或引用转换为指向派生类的指针或引用
  5. static_cast:用于在编译时进行类型转换,它可以将一个表达式转换为指定的类型。
  6. reinterpret_cast:用于在编译时进行类型转换,它可以将一个指针或引用转换为另一个类型的指针或引用
  7. const_cast:用于在编译时进行类型转换,它可以将一个常量指针或引用转换为一个非常量指针或引用。

thread_coroutine

modern_cpp

tools

主要包含C++应用中涉及的工具类和GCC相关的功能说明,也包含未整理仅验证的代码。

  1. RVO/NRVO(Return Value Optimization)返回值优化
  2. void_t: C++17中引入的模板元编程工具,它通常用于检测某个类型是否具有特定的成员或特性

cpp20

next_chapter

返回目录

直接开始下一节说明: 时间相关处理应用