一只野生的善逸
吃饭,睡觉,学习。
展开
-
C++笔记之数据单位与C语言变量类型和范围
为了提高程序的可移植性,C99标准引入了固定宽度的整数类型,定义在<stdint.h>头文件中。这些类型确保了不同系统和编译器上变量类型的位宽一致性,从而避免了因为平台差异导致的溢出或数据损失问题。类型含义大小(字节)范围2 的幂次方表示int8_t8 位有符号整数1-128到127-2⁷到2⁷ - 1uint8_t8 位无符号整数10到2550到2⁸ - 1int16_t16 位有符号整数2-32,768到32,767-2¹⁵到2¹⁵ - 1uint16_t16 位无符号整数2。原创 2025-01-11 23:50:06 · 169 阅读 · 0 评论 -
C++笔记之`size_t`辨析
size_t使用场景如果需要表示大小或索引,优先使用size_t。如果需要处理负数或涉及减法运算,谨慎使用size_t,考虑使用有符号类型(如ssize_t,在 POSIX 中定义)。注意事项避免将size_t与有符号类型混用。格式化输出时,使用%zu以避免问题。编写高质量代码在循环中,若索引与数组大小相关,使用size_t。在函数参数中,若需要传递大小或长度,使用size_t。通过合理使用size_t,可以编写更加健壮、跨平台的 C/C++ 程序。原创 2025-01-06 23:01:45 · 126 阅读 · 0 评论 -
C语言笔记之`char*`、`const char*` 和 `char[]`辨析
char*是字符指针,存储的是字符数组或字符串的首地址。它可以指向动态分配的字符串、静态字符串常量或字符数组。默认情况下,char*指针所指向的内容是可修改的(但要确保它指向的内存是可写的)。是指向常量字符的指针,表示字符串内容是只读的。使用可以防止意外修改所指向的字符串内容,这是对只读字符串或常量字符串的推荐做法。char[]是一个字符数组,表示一块固定大小的内存,用来存储字符串或字符数据。数组的内容通常是可修改的,除非用const修饰。原创 2025-01-06 22:46:40 · 115 阅读 · 0 评论 -
C++笔记之尾后迭代器
1.C++笔记之尾后迭代器2.C++笔记之迭代器失效问题处理在C++中,(通常称为)是指指向容器中最后一个元素之后的位置的迭代器。它并不指向任何有效的元素,而是用来表示容器的结束边界。尾后迭代器通常通过容器的end()成员函数获取。原创 2025-01-01 23:47:31 · 263 阅读 · 0 评论 -
C语言笔记之strnlen遇到第一个‘\0‘时会停止计数导致字符串被截断吗?
strnlen遇到第一个'\0'时会停止计数,但这只是它的正常行为,不会导致字符串被截断或修改。它的作用是安全地计算字符串长度,避免超出指定的最大检查范围,从而防止访问未定义内存区域。原创 2025-01-02 00:19:40 · 72 阅读 · 0 评论 -
C++笔记之‘\n‘和‘\0‘
特性'\n''\0'含义换行符字符串的结束符ASCII 值100作用表示换行标识字符串结束常见用途格式化输出,文本换行处理字符串是否可见是(在输出中换行可见)否(是非打印字符)原创 2025-01-02 00:15:11 · 88 阅读 · 0 评论 -
C++笔记之C语言和C++中未初始化变量的默认值问题
局部变量:未初始化始终是未定义的(垃圾值)。全局变量和静态变量:始终默认初始化为零值。malloc未初始化,calloc初始化为零。原创 2025-01-01 16:07:44 · 167 阅读 · 0 评论 -
C++笔记之C++中的argv[0]和Linux bash脚本中的$0区别
argv[0]是main函数的参数列表中的第一个参数。它通常表示程序的名称或被用来启动程序的路径。在 C++ 程序中,argv[0]是一个字符串指针 (char*),可以通过它获得程序的调用名。特性argv[0](C++)$0(Bash)表示内容程序名或路径脚本名或路径数据类型字符指针 (char*字符串值的来源操作系统提供Shell 提供值是否包含路径根据执行方式,可能包含路径根据执行方式,可能包含路径特殊情况某些环境下可能为空字符串source或。原创 2024-12-29 20:34:52 · 123 阅读 · 0 评论 -
C++笔记之格式化字符串
格式化字符串是一种灵活的字符串生成方式,能够根据变量动态创建内容,同时提供多种格式化选项。不同语言提供的格式化方式略有不同,但核心思想类似:通过占位符插入变量,并可控制其格式。原创 2024-12-29 19:14:47 · 94 阅读 · 0 评论 -
C++笔记之标识符与字面量
标识符(Identifier)是用于命名变量、函数、类、方法或其他用户定义元素的名称。它是程序中指代某个实体的符号。字面量(Literal)是指程序中表示固定值的符号,即直接写在代码中的常量值。字面量通常用于表示数字、字符、字符串、布尔值等。标识符是程序中用于命名变量、函数、类等元素的名称。字面量是程序中直接表示固定值的符号。它们的区别在于:标识符是用户定义的名称,而字面量是直接使用的常量值。原创 2024-12-29 18:30:24 · 92 阅读 · 0 评论 -
C++笔记之单例模式与静态方法的使用辨析及代码规范
单例模式适合需要全局唯一实例的场景。静态方法适用于无需保存对象状态的工具类操作。单例模式中的静态方法可以结合两者的优点,既保证类的唯一性,又提供了简洁的调用方式。原创 2024-11-27 23:56:05 · 276 阅读 · 0 评论 -
C++笔记之构造函数声明只需要写明需要的参数,不需要列出所有成员变量、可以使用成员初始化列表初始化所有需要的成员变量
成员初始化列表(Member Initializer List)允许在构造函数体执行之前对类的非静态成员变量进行初始化。即使某些成员变量没有直接对应构造函数参数,也可以在初始化列表中显式赋值。如果某个成员变量既有默认成员初始化器(Default Member Initializer)又出现在成员初始化列表中,则成员初始化列表优先。成员初始化顺序(Initialization Order)严格按照它们在类中声明的顺序进行,而不是按照初始化列表的书写顺序。原创 2024-11-26 00:57:12 · 104 阅读 · 0 评论 -
C++笔记之函数入参传递std::unique_ptr 时使用 std::move的场景
这个场景适用于需要转移资源管理权的情况,例如动态分配的对象的生命周期需要交给另一个组件或函数管理。原创 2024-11-24 18:44:38 · 148 阅读 · 0 评论 -
C++笔记之智能指针shared_ptr和unique_ptr的初始化方法
优先使用和:提供更好的异常安全性和性能。避免直接使用new:除非有特殊需求,例如自定义删除器。注意所有权的转移和共享不能复制,但可以移动,表示唯一所有权。可以复制,表示共享所有权。避免重复管理同一原始指针:不要在多个智能指针中包装同一个原始指针,以防止重复释放导致未定义行为。示例代码public:MyClass() { std::cout原创 2024-11-03 15:10:00 · 114 阅读 · 0 评论 -
C++笔记之静态多态和动态多态
静态多态又称编译时多态,指的是在编译期间确定具体调用哪个函数或方法。C++中实现静态多态的常用方式包括函数重载(Function Overloading)、运算符重载(Operator Overloading)和模板(Templates)。动态多态又称运行时多态,指的是在运行时决定具体调用哪个函数或方法。C++中通过继承(Inheritance)和虚函数(Virtual Functions)来实现动态多态。原创 2024-10-17 23:01:05 · 292 阅读 · 0 评论 -
C++笔记之类三种的继承方式
私有继承主要用于实现“is-implemented-in-terms-of”关系。通过选择不同的继承方式,可以控制对象的可访问性和转换能力。但是在派生类的成员函数或派生类的派生类中可以访问基类。这是最常见的继承方式,用于实现“is-a”关系。子类对象不能在类外部隐式转换为基类对象。子类对象可以隐式转换为基类对象。子类对象不能隐式转换为基类对象。原创 2024-10-14 23:58:52 · 152 阅读 · 0 评论 -
C++笔记之原子操作
在 C++ 中,原子类型提供了对共享变量的无锁操作,确保多线程环境下的安全。这些是 C++ 中原子操作的一些基本用法,确保在多线程编程中安全地操作共享数据。是一个原子操作,用于将一个新的值赋给原子对象,并返回该对象的旧值。这两个函数用于比较并交换值。可以直接初始化原子类型,使用标准库中的。经常用于循环中,以处理可能的伪失败。假设有两个相同类型的原子变量。原创 2024-10-08 01:26:50 · 283 阅读 · 0 评论 -
C++笔记之shared_ptr的reset()函数
的reset()函数用于管理指针的生命周期。原创 2024-10-08 00:56:34 · 196 阅读 · 0 评论 -
C++笔记之标准库和boost库中bind占位符_1的写法差异
在C++中,_1和_1: 通常用于使用Boost.Bind时的占位符。在使用Boost库时,可能会看到这种用法。: 这是C++11标准库中的占位符,用于std::bind。C++11引入了标准库版本的bind,因此需要使用命名空间中的占位符。原创 2024-10-05 17:07:29 · 220 阅读 · 0 评论 -
C++笔记之类间传参的方法
定义一个全局函数,该函数接受一个类的对象作为参数,并在函数内部调用另一个类的方法,将参数传递给该方法。定义一个全局变量,在一个类中设置该变量的值,然后在另一个类中访问该变量的值。将其中一个类设计为单例类,提供一个静态方法来获取该类的唯一实例。在另一个类中,通过调用单例类的静态方法来获取实例,并调用实例的方法传递参数。定义一个中介者类,该类知晓两个类的存在,并提供方法来协调它们之间的交互。两个类都持有中介者类的指针或引用,并通过中介者类来传递参数。一个类作为被观察者,另一个类作为观察者。原创 2024-09-17 00:56:54 · 383 阅读 · 0 评论 -
C++笔记之子类初始化时父类带参构造函数的处理、父子类中模板参数的传递
在 C++ 中,当子类继承父类时,子类的初始化通常包括调用父类的构造函数。在子类的构造函数初始化列表中,可以指定调用哪个父类的构造函数。这个机制确保父类部分在子类构造之前被正确初始化。在 C++ 中,子类必须调用父类的某个构造函数。如果父类只有带参数的构造函数,子类就必须在初始化列表中显式调用它,否则编译会失败。如果父类有默认构造函数(无参数构造函数),子类可以不显式调用父类的构造函数,编译器会自动调用默认构造函数。原创 2024-09-15 14:20:14 · 301 阅读 · 0 评论 -
C++笔记之std::map的实用操作
的所有键和值,可以使用一个循环遍历每个键值对。在 C++ 中,你可以使用多种方式初始化。这种方法会清空原有内容,然后插入新元素。中的每个键值对,并检查每个值是否为。,并打印每个键和值。原创 2024-09-10 23:42:55 · 426 阅读 · 0 评论 -
C++笔记之在基类和派生类之间进行类型转换的所有方法
使用时,注重安全性和类型检查,适用于不确定类型的向下转换。使用时,更关注性能和已知的类型转换,适合明确知道转换是安全的场景。原创 2024-08-25 02:41:21 · 211 阅读 · 0 评论 -
C++笔记之通过CMakeLists.txt像使用boost库一样使用qt库中特有的模块来方便开发
【代码】C++笔记之通过CMakeLists.txt像使用boost库一样使用qt库中特有的模块来方便开发。原创 2024-06-20 23:59:17 · 237 阅读 · 0 评论 -
C++笔记之RegisterCallback和setCallback、以及setCallback(lambda表达式)
用于注册多个回调函数,通常在事件系统或多观察者模式中使用。:用于设置或替换一个回调函数,通常用于单一事件处理场景。原创 2024-06-19 00:15:55 · 265 阅读 · 0 评论 -
C++笔记之一个函数多个返回值的方法、std::pair、std::tuple、std::tie的用法
要使用std::pair,需要包含头文件。T2 second;std::pair是一个简单但非常有用的工具,适用于需要将两个相关值绑定在一起的场景。通过理解它的构造函数、成员函数和比较操作符,可以在 C++ 编程中更有效地使用它。要使用std::tuple,需要包含头文件。std::tuple是一个可变参数模板类,可以包含任意数量的元素。std::tuple是一个非常强大的工具,可以在 C++ 中存储和操作多个不同类型的值。原创 2024-06-08 15:48:27 · 618 阅读 · 0 评论 -
C++笔记之Unix时间戳、UTC、TSN、系统时间戳、时区转换、local时间、转换为字符串的方法
UTC(协调世界时)是目前国际上最广泛采用的世界时间标准。它基于国际原子时(TAI)与太阳时间(UT1)之间的差异进行调整,确保与地球自转速度保持一致。原创 2024-05-26 21:23:02 · 513 阅读 · 0 评论 -
C++笔记之在类内部和类外部启动线程传入成员函数时的不同写法
—— 2024-05-12 参考笔记:C++笔记之lambda捕获列表中的‘this‘指针假设有一个类,它有一个成员函数:1. 在类外部使用直接使用成员函数指针使用 lambda 表达式2. 在类内部使用使用成员函数指针使用 lambda 表达式比较表格这张表格展示了在类内部和类外部启动线程以及使用不同技术(成员函数指针、lambda 表达式)的对比:总结来说,选择哪种方法取决于代码的具体需求和个人的编程风格。Lambda表达式因其灵活性和简洁性通常是推荐的方式,尤其是在涉及复杂捕获逻原创 2024-05-12 19:21:29 · 186 阅读 · 0 评论 -
C++笔记之调用PCL库显示PCD文件的点云
— 2024-05-05 杭州。原创 2024-05-06 01:10:45 · 340 阅读 · 0 评论 -
C++笔记之memcpy探究
结构体。原创 2024-04-28 21:40:37 · 182 阅读 · 0 评论 -
C++笔记之C++、C语言、PISIX、拿到线程函数的返回值的所有方法
— 2023-12-10原创 2024-04-21 15:34:02 · 431 阅读 · 0 评论 -
C++笔记之std::bind(&MyClass::MemberFunction, &myObject)详解
是标准库中的一个函数模板,它的主要用途是将函数调用包装起来,可以绑定函数调用中的一些参数,让我们可以延迟函数调用或者将其作为参数传递给其他函数。来绑定一个成员函数时,需要传递成员函数的地址和一个对象的实例(或者指向对象的指针)作为参数。是 C++11 中引入的一个函数适配器,它的主要作用是将一个函数或可调用对象以及其参数绑定成为一个新的可调用对象。是带参数的成员函数,那么在绑定时,可以在对象实例之后添加成员函数的参数。占位符可以在调用时指定参数的位置,从而实现参数顺序的重新排列或者部分参数的固定。原创 2024-04-10 23:44:24 · 194 阅读 · 0 评论 -
C++笔记之注册回调函数常见的5种情况对比
当事件循环运行时,它会处理队列中的事件,调用注册的回调函数。在面向对象的设计中,这种方法不够灵活或安全,因为它不支持成员函数的直接回调,且无法保证回调函数与对象的状态相关联。在面向对象设计中,回调函数通常与对象的状态紧密相关,因此会注册对象的成员函数作为回调,以便在回调时能够访问对象的状态。在C++中,事件循环通常是由一个循环实现的,等待事件发生,并根据事件的类型调用相应的回调函数。:因为槽是对象的成员函数,它自然可以访问和修改对象的状态,这符合“情况 5”的描述,即回调函数需要访问对象状态时。原创 2024-04-10 23:39:39 · 923 阅读 · 0 评论 -
C语言笔记之struct dirent*和DIR*
文件和子目录的名称将按照在文件系统中的存储顺序显示,这通常与文件名的字母顺序不同。目录流代表着一个打开的目录,它可以用来查看该目录中的文件和子目录。在实际应用中,可能需要更复杂的逻辑来处理特殊的目录项,如。这是一个典型的模式,用于遍历所有的目录项。这通常用于排除这两个目录项,因为它们在目录遍历中通常不是们关心的项。指针表示已经到达目录流的末尾,没有更多的目录项可读。,即存在另一个目录项,则循环体内的代码块将被执行。结构体的成员,包含了目录项的文件名)是否等于。,这是一个字符数组,包含了目录项的名字。原创 2024-04-05 18:34:06 · 495 阅读 · 0 评论 -
C++笔记之pkg-config详解,以及g++、gcc编译时使用pkg-config
的优势是它自动处理这些细节,包括库依赖关系、版本号和路径问题。如果手动指定这些参数,需要确保它们是正确的,并且当库更新或路径变化时,可能需要手动更新编译命令。是一个非常有用的工具,它简化了编译和链接过程中的库依赖管理。是一个在编译时用来帮助获取库的相关信息的工具。它主要用于获取编译和链接时所需的标志,例如。头文件和库文件的安装位置。当在编译程序时,如果程序依赖于某个库(如 GTK+, libxml2 等),所需的标志,需要手动指定这些标志。来简化 C++ 程序的编译过程,包括自动获取编译器和链接器标志。原创 2024-04-05 14:51:32 · 564 阅读 · 0 评论 -
C++笔记之memmove函数(可重叠)
— 2024-03-25 夜。原创 2024-03-25 22:49:32 · 221 阅读 · 0 评论 -
C++笔记之argv[1]与字符串内容的比较
在 C++ 中,argv[1] 是一个 char*类型,它指向第一个命令行参数的第一个字符。比较两个 char* 类型的值实际上是比较两个指针,而不是它们指向的字符串内容。因此,if(argv[1] == “Hello”)。实际上比较的是两个内存地址,而不是字符串值。返回 0,那么两个字符串是相同的。对象的内容,如果内容相同,那么结果是。原创 2024-03-24 23:34:31 · 353 阅读 · 0 评论 -
C++笔记之设计模式全局状态管理类:使整个工程项目中的所有函数可以访问同一个变量,并且能够感知到这个变量的变化(变量共享)
—— 2024-03-21 夜实现方法:code review!类GlobalState包含一个可以被整个项目访问的变量value1.2.main.cpp可以在任何需要的地方包含这个头文件,并使用GlobalState::getInstance()来获取全局状态的实例,并通过它访问和修改value:虽然单例模式解决了全局变量的一些问题,但它仍然可能导致代码测试和维护的困难,因为它引入了全局状态。此外,如果在多线程环境中使用单例,还需要考虑线程安全性。在这种情况下,可能需要使用线程局部存储(thr原创 2024-03-21 18:55:48 · 342 阅读 · 0 评论 -
C++笔记之给枚举类型的变量赋值
如果你想打印枚举值的名称而不是它的整数值,你需要写一个函数来将枚举值转换为字符串。C++11及之后的版本中没有直接的方式将枚举值转换为其对应的名称字符串。在C++中,你可以在结构体内部定义一个枚举类型,并在创建结构体变量时给枚举类型的变量赋值。请注意,在 C++ 中,枚举值默认是整型,所以在上面的。会被输出为其对应的整数值(在这个例子中是。是枚举中的第二个值,而枚举值默认从。—— 杭州 2024-03-10。的枚举类型,并声明了一个。函数中,我们创建了一个。,然后使用作用域运算符。原创 2024-03-10 07:37:41 · 408 阅读 · 0 评论 -
C++笔记之嵌套类中的成员函数识别外层类的成员变量
— 杭州 2024-03-10。原创 2024-03-10 07:34:39 · 128 阅读 · 0 评论