一只野生的善逸
吃饭,睡觉,学习的单身狗
展开
-
C++笔记之智能指针shared_ptr和unique_ptr的初始化方法
优先使用和:提供更好的异常安全性和性能。避免直接使用new:除非有特殊需求,例如自定义删除器。注意所有权的转移和共享不能复制,但可以移动,表示唯一所有权。可以复制,表示共享所有权。避免重复管理同一原始指针:不要在多个智能指针中包装同一个原始指针,以防止重复释放导致未定义行为。示例代码public:MyClass() { std::cout原创 2024-11-03 15:10:00 · 76 阅读 · 0 评论 -
C++笔记之静态多态和动态多态
静态多态又称编译时多态,指的是在编译期间确定具体调用哪个函数或方法。C++中实现静态多态的常用方式包括函数重载(Function Overloading)、运算符重载(Operator Overloading)和模板(Templates)。动态多态又称运行时多态,指的是在运行时决定具体调用哪个函数或方法。C++中通过继承(Inheritance)和虚函数(Virtual Functions)来实现动态多态。原创 2024-10-17 23:01:05 · 267 阅读 · 0 评论 -
C++笔记之类三种的继承方式
私有继承主要用于实现“is-implemented-in-terms-of”关系。通过选择不同的继承方式,可以控制对象的可访问性和转换能力。但是在派生类的成员函数或派生类的派生类中可以访问基类。这是最常见的继承方式,用于实现“is-a”关系。子类对象不能在类外部隐式转换为基类对象。子类对象可以隐式转换为基类对象。子类对象不能隐式转换为基类对象。原创 2024-10-14 23:58:52 · 126 阅读 · 0 评论 -
C++笔记之原子操作
在 C++ 中,原子类型提供了对共享变量的无锁操作,确保多线程环境下的安全。这些是 C++ 中原子操作的一些基本用法,确保在多线程编程中安全地操作共享数据。是一个原子操作,用于将一个新的值赋给原子对象,并返回该对象的旧值。这两个函数用于比较并交换值。可以直接初始化原子类型,使用标准库中的。经常用于循环中,以处理可能的伪失败。假设有两个相同类型的原子变量。原创 2024-10-08 01:26:50 · 251 阅读 · 0 评论 -
C++笔记之shared_ptr的reset()函数
的reset()函数用于管理指针的生命周期。原创 2024-10-08 00:56:34 · 130 阅读 · 0 评论 -
C++笔记之标准库和boost库中bind占位符_1的写法差异
在C++中,_1和_1: 通常用于使用Boost.Bind时的占位符。在使用Boost库时,可能会看到这种用法。: 这是C++11标准库中的占位符,用于std::bind。C++11引入了标准库版本的bind,因此需要使用命名空间中的占位符。原创 2024-10-05 17:07:29 · 200 阅读 · 0 评论 -
C++笔记之类间传参的方法
定义一个全局函数,该函数接受一个类的对象作为参数,并在函数内部调用另一个类的方法,将参数传递给该方法。定义一个全局变量,在一个类中设置该变量的值,然后在另一个类中访问该变量的值。将其中一个类设计为单例类,提供一个静态方法来获取该类的唯一实例。在另一个类中,通过调用单例类的静态方法来获取实例,并调用实例的方法传递参数。定义一个中介者类,该类知晓两个类的存在,并提供方法来协调它们之间的交互。两个类都持有中介者类的指针或引用,并通过中介者类来传递参数。一个类作为被观察者,另一个类作为观察者。原创 2024-09-17 00:56:54 · 342 阅读 · 0 评论 -
C++笔记之子类初始化时父类带参构造函数的处理、父子类中模板参数的传递
在 C++ 中,当子类继承父类时,子类的初始化通常包括调用父类的构造函数。在子类的构造函数初始化列表中,可以指定调用哪个父类的构造函数。这个机制确保父类部分在子类构造之前被正确初始化。在 C++ 中,子类必须调用父类的某个构造函数。如果父类只有带参数的构造函数,子类就必须在初始化列表中显式调用它,否则编译会失败。如果父类有默认构造函数(无参数构造函数),子类可以不显式调用父类的构造函数,编译器会自动调用默认构造函数。原创 2024-09-15 14:20:14 · 285 阅读 · 0 评论 -
C++笔记之std::map的实用操作
的所有键和值,可以使用一个循环遍历每个键值对。在 C++ 中,你可以使用多种方式初始化。这种方法会清空原有内容,然后插入新元素。中的每个键值对,并检查每个值是否为。,并打印每个键和值。原创 2024-09-10 23:42:55 · 336 阅读 · 0 评论 -
C++笔记之在基类和派生类之间进行类型转换的所有方法
使用时,注重安全性和类型检查,适用于不确定类型的向下转换。使用时,更关注性能和已知的类型转换,适合明确知道转换是安全的场景。原创 2024-08-25 02:41:21 · 173 阅读 · 0 评论 -
C++笔记之通过CMakeLists.txt像使用boost库一样使用qt库中特有的模块来方便开发
【代码】C++笔记之通过CMakeLists.txt像使用boost库一样使用qt库中特有的模块来方便开发。原创 2024-06-20 23:59:17 · 221 阅读 · 0 评论 -
C++笔记之RegisterCallback和setCallback、以及setCallback(lambda表达式)
用于注册多个回调函数,通常在事件系统或多观察者模式中使用。:用于设置或替换一个回调函数,通常用于单一事件处理场景。原创 2024-06-19 00:15:55 · 219 阅读 · 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 · 513 阅读 · 0 评论 -
C++笔记之Unix时间戳、UTC、TSN、系统时间戳、时区转换、local时间、转换为字符串的方法
UTC(协调世界时)是目前国际上最广泛采用的世界时间标准。它基于国际原子时(TAI)与太阳时间(UT1)之间的差异进行调整,确保与地球自转速度保持一致。原创 2024-05-26 21:23:02 · 359 阅读 · 0 评论 -
C++笔记之在类内部和类外部启动线程传入成员函数时的不同写法
—— 2024-05-12 杭州 参考笔记:C++笔记之lambda捕获列表中的‘this‘指针假设有一个类,它有一个成员函数:1. 在类外部使用直接使用成员函数指针使用 lambda 表达式2. 在类内部使用使用成员函数指针使用 lambda 表达式比较表格这张表格展示了在类内部和类外部启动线程以及使用不同技术(成员函数指针、lambda 表达式)的对比:总结来说,选择哪种方法取决于代码的具体需求和个人的编程风格。Lambda表达式因其灵活性和简洁性通常是推荐的方式,尤其是在涉及复杂捕获逻原创 2024-05-12 19:21:29 · 134 阅读 · 0 评论 -
C++笔记之调用PCL库显示PCD文件的点云
— 2024-05-05 杭州。原创 2024-05-06 01:10:45 · 314 阅读 · 0 评论 -
C++笔记之memcpy探究
结构体。原创 2024-04-28 21:40:37 · 149 阅读 · 0 评论 -
C++笔记之C++、C语言、PISIX、拿到线程函数的返回值的所有方法
— 2023-12-10 杭州。原创 2024-04-21 15:34:02 · 421 阅读 · 0 评论 -
C++笔记之std::bind(&MyClass::MemberFunction, &myObject)详解
是标准库中的一个函数模板,它的主要用途是将函数调用包装起来,可以绑定函数调用中的一些参数,让我们可以延迟函数调用或者将其作为参数传递给其他函数。来绑定一个成员函数时,需要传递成员函数的地址和一个对象的实例(或者指向对象的指针)作为参数。是 C++11 中引入的一个函数适配器,它的主要作用是将一个函数或可调用对象以及其参数绑定成为一个新的可调用对象。是带参数的成员函数,那么在绑定时,可以在对象实例之后添加成员函数的参数。占位符可以在调用时指定参数的位置,从而实现参数顺序的重新排列或者部分参数的固定。原创 2024-04-10 23:44:24 · 187 阅读 · 0 评论 -
C++笔记之注册回调函数常见的5种情况对比
当事件循环运行时,它会处理队列中的事件,调用注册的回调函数。在面向对象的设计中,这种方法不够灵活或安全,因为它不支持成员函数的直接回调,且无法保证回调函数与对象的状态相关联。在面向对象设计中,回调函数通常与对象的状态紧密相关,因此会注册对象的成员函数作为回调,以便在回调时能够访问对象的状态。在C++中,事件循环通常是由一个循环实现的,等待事件发生,并根据事件的类型调用相应的回调函数。:因为槽是对象的成员函数,它自然可以访问和修改对象的状态,这符合“情况 5”的描述,即回调函数需要访问对象状态时。原创 2024-04-10 23:39:39 · 814 阅读 · 0 评论 -
C语言笔记之struct dirent*和DIR*
文件和子目录的名称将按照在文件系统中的存储顺序显示,这通常与文件名的字母顺序不同。目录流代表着一个打开的目录,它可以用来查看该目录中的文件和子目录。在实际应用中,可能需要更复杂的逻辑来处理特殊的目录项,如。这是一个典型的模式,用于遍历所有的目录项。这通常用于排除这两个目录项,因为它们在目录遍历中通常不是们关心的项。指针表示已经到达目录流的末尾,没有更多的目录项可读。,即存在另一个目录项,则循环体内的代码块将被执行。结构体的成员,包含了目录项的文件名)是否等于。,这是一个字符数组,包含了目录项的名字。原创 2024-04-05 18:34:06 · 437 阅读 · 0 评论 -
C++笔记之pkg-config详解,以及g++、gcc编译时使用pkg-config
的优势是它自动处理这些细节,包括库依赖关系、版本号和路径问题。如果手动指定这些参数,需要确保它们是正确的,并且当库更新或路径变化时,可能需要手动更新编译命令。是一个非常有用的工具,它简化了编译和链接过程中的库依赖管理。是一个在编译时用来帮助获取库的相关信息的工具。它主要用于获取编译和链接时所需的标志,例如。头文件和库文件的安装位置。当在编译程序时,如果程序依赖于某个库(如 GTK+, libxml2 等),所需的标志,需要手动指定这些标志。来简化 C++ 程序的编译过程,包括自动获取编译器和链接器标志。原创 2024-04-05 14:51:32 · 480 阅读 · 0 评论 -
C++笔记之memmove函数(可重叠)
— 杭州 2024-03-25 夜。原创 2024-03-25 22:49:32 · 203 阅读 · 0 评论 -
C++笔记之argv[1]与字符串内容的比较
在 C++ 中,argv[1] 是一个 char*类型,它指向第一个命令行参数的第一个字符。比较两个 char* 类型的值实际上是比较两个指针,而不是它们指向的字符串内容。因此,if(argv[1] == “Hello”)。实际上比较的是两个内存地址,而不是字符串值。返回 0,那么两个字符串是相同的。对象的内容,如果内容相同,那么结果是。原创 2024-03-24 23:34:31 · 282 阅读 · 0 评论 -
C++笔记之设计模式全局状态管理类:使整个工程项目中的所有函数可以访问同一个变量,并且能够感知到这个变量的变化(变量共享)
—— 杭州 2024-03-21 夜实现方法:code review!类GlobalState包含一个可以被整个项目访问的变量value1.2.main.cpp可以在任何需要的地方包含这个头文件,并使用GlobalState::getInstance()来获取全局状态的实例,并通过它访问和修改value:虽然单例模式解决了全局变量的一些问题,但它仍然可能导致代码测试和维护的困难,因为它引入了全局状态。此外,如果在多线程环境中使用单例,还需要考虑线程安全性。在这种情况下,可能需要使用线程局部存储(thr原创 2024-03-21 18:55:48 · 298 阅读 · 0 评论 -
C++笔记之给枚举类型的变量赋值
如果你想打印枚举值的名称而不是它的整数值,你需要写一个函数来将枚举值转换为字符串。C++11及之后的版本中没有直接的方式将枚举值转换为其对应的名称字符串。在C++中,你可以在结构体内部定义一个枚举类型,并在创建结构体变量时给枚举类型的变量赋值。请注意,在 C++ 中,枚举值默认是整型,所以在上面的。会被输出为其对应的整数值(在这个例子中是。是枚举中的第二个值,而枚举值默认从。—— 杭州 2024-03-10。的枚举类型,并声明了一个。函数中,我们创建了一个。,然后使用作用域运算符。原创 2024-03-10 07:37:41 · 344 阅读 · 0 评论 -
C++笔记之嵌套类中的成员函数识别外层类的成员变量
— 杭州 2024-03-10。原创 2024-03-10 07:34:39 · 106 阅读 · 0 评论 -
C++笔记之在成员函数中打印出对象名
的定义被放在了"MyClass.h"中,而它的实现被放在了"MyClass.cpp"中。在实现文件中包含相应的头文件是非常重要的,因为它提供了类声明的信息。文件中,我们包含"MyClass.h"来使用。编译时,通常需要将所有的源文件(文件,并将它们链接为一个名为。原创 2024-03-10 07:20:28 · 123 阅读 · 0 评论 -
Protobuf学习笔记以及序列化的一些概念要点(暂放C++笔记专栏)
明确字节序的差异,必要时进行字节序的转换。使用与字节序无关的序列化框架和数据交换格式。仔细设计和测试序列化和反序列化逻辑,确保数据结构中元素的顺序得到正确处理。正确处理这些问题可以确保数据在不同系统、平台和编程语言之间能够准确无误地传输和恢复。原创 2024-03-03 11:46:39 · 122 阅读 · 0 评论 -
C++笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径
如果你提供了可执行文件的完整路径,就像上面的例子一样,它的行为类似于。下面是一个简单的示例,展示了如何在不使用Qt的情况下,使用C++在Linux下启动一个新进程并设置。的第一个参数(程序的路径),另一次作为第二个参数(argv[0],即程序名)。函数替换了当前进程的映像为一个新程序的映像,这个新程序就是我们想要执行的程序。调用成功,当前进程的执行代码将被新程序替换,因此如果看到后面的错误消息输出,说明。函数时,第一个参数是可执行文件的名称,第二个参数是参数数组。如果你的外部程序需要带参数,你可以在调用。原创 2024-02-26 22:19:20 · 230 阅读 · 0 评论 -
C++笔记之ntohl()函数详解
ntohl()是一个网络字节顺序转换函数,它用于将一个无符号长整型数从网络字节顺序转换为主机字节顺序。ntohl是 “Network TO Host Long” 的缩写。计算机网络中使用的字节顺序通常是大端(Big-Endian),而不同的主机可能采用大端或小端(Little-Endian)字节顺序。当在不同字节顺序的主机之间通过网络通信时,确保数据在发送和接收时具有正确的字节顺序是非常重要的。原创 2024-02-24 17:49:55 · 789 阅读 · 0 评论 -
C++笔记之regex(正则表达式)
当中的最后一个参数为0时,它会返回正则表达式的完整匹配,这与的基本行为相同。构造函数的参数不同接收一个额外的整数参数,即使是0,来指定要返回的匹配或子匹配。不接收这样的参数,因为它总是返回完整的匹配。返回类型不同的解引用操作返回的是对象,它表示一个字符序列,可以转化为。的解引用操作返回的是对象,它包含了完整匹配和所有子匹配。通常,我们通过调用str()方法来获取匹配的字符串。性能方面可能有差异尽管两者在行为上非常相似,但是因为设计上更通用,可能在某些实现中比稍微低效。原创 2024-02-10 22:47:35 · 614 阅读 · 0 评论 -
C++笔记之奇异递归模板模式CRTP(Curiously Recurring Template Pattern)和静态多态
— 杭州 2024-01-28。原创 2024-01-28 18:11:42 · 192 阅读 · 0 评论 -
C++笔记之RTTI、RAII、MVC、MVVM、SOLID在C++中的表现
自定义实现RTTI可以提供更灵活和高效的解决方案。以下是一个简单的自定义实现RTTI的示例。主要是通过getName虚方法在运行时断言类型。public:public:class Basepublic:public:int main()if(typeInfo.getName() == "Derived") //进行类型识别//安全转换return 0;原创 2024-01-28 16:42:46 · 535 阅读 · 0 评论 -
C++笔记之作用域解析符::和命名空间、作用域的关系
命名空间是C++中的一个容器,它用于封装一组具有唯一名称的实体(如变量、函数、类等)。它的主要目的是解决不同库之间的命名冲突问题,允许开发者组织代码片段以防止命名冲突。原创 2024-01-26 19:06:23 · 339 阅读 · 0 评论 -
C++笔记之bool类型的隐式转换现象与应用
public:// 基于某些条件返回true或falseMyBool obj;if (obj) {// obj会隐式转换为bool类型,如果转换结果为true,执行这里的代码请注意,为了避免隐式类型转换可能导致的潜在错误,现代C++编程建议使用explicit关键字来避免构造函数和转换函数的隐式转换。对于上面的自定义类型例子,如果不希望MyBool类型的对象在布尔上下文中被隐式地使用,应将转换运算符声明为explicit。原创 2024-01-21 21:03:16 · 212 阅读 · 0 评论 -
《Effective C++》条款02、条款03、条款20、条款21阅读笔记:关于static、const、constexpr的思考
—— 杭州 2024-01-15 原文:旧式编译器也许不支持上述语法,它们不允许static成员在其声明式上获得初值。此外所谓的"in-class初值设定"也只允许对整数常量进行。如果你的编译器不支持上述语法,你可以将初值放在定义式。唯一例外是当你在class编译期间需要一个class常量值,例如在上述的GamePlayer::scores的数组声明式中(是的,编译器坚持必须在编译期间知道数组的大小)。这时候万一你的编译器(错误地)不允许"static整数型class常量"完成"in class初值设定"原创 2024-01-15 00:41:24 · 164 阅读 · 0 评论 -
C++笔记之vector和thread结合使用
code review!原创 2023-06-22 17:38:45 · 1572 阅读 · 1 评论 -
C++之指针探究(六):二级指针和指针数组
前文:C++之指针探究(五):数组指针和二维数组使用指向指针的指针来指向数组指针,至少有以下两个优势: ♠\spadesuit♠ 避免重复分配内存(下例中虽然我们进行了多个分类,但每本书名只占据一个存储位置,没有浪费)。 ♠\spadesuit♠ 只需要进行一处修改(如果其中一个书名需要修改,只需要修改一个地方即可)。这样,代码的灵活性和安全性都有了显著提高。例:图书分类问题运行结果:附上例代码://小问学编程#include<stdio.h>int main()原创 2020-12-27 15:51:19 · 265 阅读 · 0 评论 -
vscode运行C/C++单个文件的最简单方法
step1:写好程序#include<iostream>using namespace std;int main(){ cout<<"I love you!"<<endl; int a=1; int b=2; int c; c=a+b; cout<<"c="<<c<<endl; return 0;}step2:Ctrl+shift+b,选编译器g++step原创 2022-04-11 17:30:31 · 1869 阅读 · 1 评论