随笔分类 - C++代码块
摘要:在C++中,class Json final 的 final 关键字用于防止该类被继承,表示 Json 是一个最终类,不能被其他类继承。具体来说: final 关键字:当在类定义后添加 final 时,编译器会确保没有其他类可以继承这个类。如果尝试继承它,将导致编译错误。例如: class Json
阅读全文
摘要:kernel::Module 这种用法表明 Module 是位于 kernel 命名空间或命名模块中的一个类型或对象。在C++中,这样的用法用于访问特定命名空间下的类、结构体、函数或其他成员。以下是一些可能的情况,取决于上下文: 命名空间 (Namespace):如果 kernel 是一个命名空间(
阅读全文
摘要:.c和.cpp文件的主要区别在于它们对应的编程语言不同,.c文件通常用于C语言,而.cpp文件用于C++语言。虽然C和C++有许多相似之处,但它们之间也有显著的差异: 语言特性: .c文件使用的是C语言,C是一种过程式编程语言,注重过程和步骤。 .cpp文件使用的是C++语言,C++是一种面向对象编
阅读全文
摘要:在 C++ 中,结构体(struct)可以通过指针或直接实例来定义。选择使用指针或直接实例化结构体取决于几个因素,包括内存管理、性能、语义和使用场景。以下是一些常见的考虑因素: 1. 内存管理: 指针: 使用指针时,结构体的实例通常在堆上分配。这允许动态管理内存,可以在运行时决定结构体的数量,适合大
阅读全文
摘要:cmake常用的几个操作 mkdir build: 创建一个名为 build 的目录,通常用于存放构建过程中生成的文件。这种做法能够避免把编译生成的文件混在源代码目录中,保持源代码目录干净。 cd build: 进入刚刚创建的 build 目录,这样后续的构建操作都将在这个目录内进行。 cmake
阅读全文
摘要:在 Linux 下统计可执行程序的执行耗时,你可以使用 time 命令。它能够显示程序的用户时间、系统时间和总耗时等详细信息。以下是 time 命令的基本使用方式: time ./your_program 其中 your_program 是你要运行的可执行文件。 输出解释: real 0m2.123
阅读全文
摘要:#ifdef __cplusplus 和 extern "C" 是一种常见的预处理宏,用于确保在 C++ 代码中兼容 C 语言的函数或代码接口。让我们逐步解释: 1. #ifdef __cplusplus __cplusplus 是一个在 C++ 编译器中定义的宏,用来表示当前代码是用 C++ 编译
阅读全文
摘要:在跨语言调用时,C 语言接口之所以广泛使用,是因为它具备以下几个重要的特点,使得它非常适合在不同编程语言之间进行互操作。以下是详细原因: 1. C 的 ABI(应用二进制接口)稳定性和广泛支持 ABI 稳定性: C 语言的 ABI 是非常稳定且广泛支持的。ABI 决定了函数调用的方式、数据类型的布局
阅读全文
摘要:int32_t 是一个在 C 和 C++ 中定义的固定宽度整数类型。它表示一个 32 位的有符号整数类型,定义在 stdint.h(C 标准库)或 cstdint(C++ 标准库)中。 宽度: 32 位 取值范围: -2,147,483,648 到 2,147,483,647 类型: 有符号整数 (
阅读全文
摘要:使用 char* text 来存储 OCR(光学字符识别)检测结果是常见的做法,因为 OCR 的输出通常是文本数据,而 C 和 C++ 使用 char* 类型来处理字符串。以下是原因和工作原理: 1. 字符串在 C/C++ 中的表示: 在 C 和 C++ 中,字符串通常表示为一个以 \0(空字符)结
阅读全文
摘要:回调函数(callback function)是指作为参数传递给另一个函数的函数,在某个事件发生或某个任务完成时被调用。回调函数在异步编程中非常常见,因为它们允许代码在某个操作完成后自动执行某些行为,而无需阻塞程序。 回调函数的基本特征 作为参数传递:回调函数通常是作为参数传递给另一个函数。 由调用
阅读全文
摘要:在C++中,pthread_create 和 pthread_join 是 POSIX 线程库(pthread)的一部分,用于创建和管理线程。pthread_create 用于创建一个新的线程,而 pthread_join 用于等待一个线程的执行完成,从而实现线程同步与控制。 基本步骤 使用 pth
阅读全文
摘要:在编程中,魔鬼数字(magic numbers)是指代码中直接使用的未经解释的常量数字,这些数字通常没有明确的含义,可能会使代码变得难以理解、维护或扩展。魔鬼数字的存在会让人难以判断这些数字的用途或来源,因此在代码中通常建议避免使用魔鬼数字,而是用具名的常量或宏来代替。 在你提供的示例代码中,以下几
阅读全文
摘要:在C++中,const关键字用于声明常量、保护变量不被修改、限制函数行为等。它是用于提升代码安全性和可维护性的一个重要特性。以下是const关键字在不同场景中的使用方式及其作用: 1. 定义常量 const关键字可以用来定义不可修改的常量。在这种情况下,常量的值在初始化时被设置,并且不能在后续的代码
阅读全文
摘要:函数圈复杂度(Cyclomatic Complexity),也称为圈复杂度或麦凯布复杂度,是衡量代码复杂度的一种指标。它由计算一个函数或模块中独立执行路径的数量得出,反映了程序的控制流复杂性。 圈复杂度的核心思想是,函数的复杂性越高,代码中的分支、循环和条件判断越多,程序的独立路径数就越多。因此,圈
阅读全文
摘要:在编程中,goto语句会使程序控制流跳转到指定的标签位置。尽管它在某些情况下可以简化代码(例如在错误处理或异常情况下快速退出多个嵌套的循环),但通常建议慎用甚至避免使用goto语句。主要原因如下: 1. 破坏代码的结构化 goto语句允许程序跳转到代码中的任意位置,从而打破了程序的结构化流程控制(如
阅读全文
摘要:GlobalSettings(const GlobalSettings&) = delete; GlobalSettings& operator=(const GlobalSettings&) = delete; 这两行代码是为了禁止拷贝构造函数和赋值操作符,也就是说,GlobalSettings
阅读全文
摘要:单例模式(Singleton Pattern)是一种常用的设计模式,旨在确保一个类只有一个实例,并提供一个全局的访问点。要使用单例模式管理全局变量,可以通过控制类的实例化过程,防止多个对象的创建。这样做不仅可以保证数据一致性,还能避免使用直接的全局变量带来的命名冲突和潜在的多线程安全问题。 以下是如
阅读全文
摘要:互斥锁(Mutex,全称:Mutual Exclusion)是一种用于多线程编程中的同步机制,用来确保在同一时刻只有一个线程可以访问共享资源。它通过锁定机制防止多个线程同时对共享资源进行读写操作,从而避免数据竞争和不一致性问题。 互斥锁的核心思想是保证互斥访问,即当一个线程持有互斥锁并正在访问共享资
阅读全文