
C++
文章平均质量分 72
NicOym
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ 笔记——Nicoym的随记
使用 C++11 标准库使用 POSIX 线程(pthread,Linux/Unix)使用 Windows API(CreateThread)使用 C++ 线程池(C++17 后推荐),如C++17 的 std::jthread协程(C++20 新增)方式优点缺点适用场景跨平台、易用、RAII 支持创建销毁成本高通用多线程任务pthread精细控制(如优先级)仅限 Unix,手动管理Linux 底层开发Windows 原生支持仅限 Windows线程池。原创 2025-05-01 21:10:32 · 1043 阅读 · 0 评论 -
进程、线程、进程间通信Unix Domain Sockets (UDS)
所有的中断都是从保存寄存器开始,对于当前进程而言,通常是保存在进程控制块中,随后,会从堆栈中,删除由中断硬件机制存入堆栈的那部分信息,并将堆栈指针指向一个由进程处理程序所使用的临时堆栈。在完成有关工作后,大概就会使相关的进程就绪,接着调用调度程序,决定下一个该运行的进程。在进程模型中,计算机上所有可运行的软件,通常也包括操作系统本身,被组织成若干顺序进程,一个进程就是一个正在执行程序的实例,包括程序计算器、寄存器、变量当前值。通过 pipe() 系统调用创建,用于父子进程或兄弟进程间的通信。原创 2025-04-30 11:10:55 · 1172 阅读 · 0 评论 -
std::bind、 lambda表达式、std::_Bindres_helper
示例1:利用 lambda表达式封装calculate函数,使其第二个参数固定为0.1这里只是为了举例说明lambda表达式的语法!!!原创 2025-04-29 01:50:05 · 952 阅读 · 0 评论 -
C++ 为什么建议类模板定义在头文件中,而不定义在源文件中
public:// 只有声明void MyTemplate<T>::foo(T x) { /* 实现 */ } // 定义在.cpp中// 链接错误:找不到foo的实例化实现!原因:main.cpp 只看到声明,不知道 foo 的实现,无法实例化 MyTemplate::foo。而 mytemplate.cpp 中的定义未被触发实例化(因为没有代码要求它实例化int版本)。(1)非模板类(普通类)的成员函数在链接时可以通过目标文件(.obj/.o)找到定义。原创 2025-04-26 21:40:20 · 892 阅读 · 0 评论 -
C++ 字符处理、编码格式
操作系统编码(如 Windows 的 ACP、Linux 的 LANG)决定了:默认的字符集(如 Windows 中文版默认 GBK,Linux 通常 UTF-8)。系统 API 的行为(如 MessageBoxA 按 ANSI 编码解析字符串)。文本编辑器编码决定的是:文件在磁盘上的存储格式(如 UTF-8、GBK、UTF-16)。如何解析文件内容(避免乱码)原创 2025-03-28 13:54:32 · 1139 阅读 · 0 评论 -
MFC中的窗口线程安全性与CWnd类
(1)定义消息ID# define WM_SEND_XXX(WM_USER + 1) // WM_USER 是系统预留的自定义消息起点1# define WM_SEND_XXX(WM_USER + 1) // WM_USER 是系统预留的自定义消息起点作用:定义一个唯一的消息标识符,避免与系统消息冲突。为什么用 WM_USER: 0x0400(WM_USER)Windows 保留0x0000 - 0x03FF ,0x0400 (WM_USER) - 0x7FFF是可以自定义使用的范围。原创 2025-03-25 17:00:24 · 764 阅读 · 0 评论 -
常量成员函数(C++)
1》提高代码的可读性和安全性,通常用于getter(访问器)方法。2》在多线程编程中,通过const成员函数来避免数据竞争。当然了,不是成员变量就可以修改,(但有什么意义呢…常量成员函数不允许修改成员变量的值;表示该函数不会修改类的成员变量。原创 2025-01-18 12:50:26 · 237 阅读 · 0 评论 -
C++ 类型转换
向上转型时,比如基类中有成员变量共占12字节,派生类的成员变量占4字节;由于通过基类指针只能访问基类的成员变量,那么就不会出现访问超过目标对象的内存范围的情况;向下转型时,通过派生类指针要访问属于派生类的成员变量,就属于非法访问了;因为目标对象是基类,根本就没有创建派生的成员变量,这时候访问,得到的就是一个未知的数;由此可见,把4字节的int类型转换为1字节的char、2字节的short类型时,从汇编的视角来看,其实只是在传递值的时候,更改了指针的类型来实现了强制转换;原创 2025-01-16 16:44:36 · 821 阅读 · 0 评论 -
C++ 多态 初学笔记
当基类构造函数中调用虚函数,此时由于派生类还没有构造,所以这个时候的虚函数还是静态绑定,调用的时基类的虚函数当派生类构造后,由于派生类中重写了虚函数,所以这个时候虚函数变成了动态绑定,调用的就是派生类重写的虚函数析构时,当派生类析构以后,派生类重写的虚函数也随之消失,再调用(在基类的析构函数中调用)虚函数时,调用的是基类的虚函数;(这里又变成了静态绑定)原创 2025-01-15 23:59:29 · 828 阅读 · 0 评论 -
C++ 智能指针、内存泄露、野指针、悬空指针
其原则就是,一一般情况,不能让多个指针指向同一块区域,二,避免释放不该释放的内存、或者重复释放。原创 2025-01-15 19:40:35 · 799 阅读 · 0 评论 -
C++ 指针数组、数组指针,指针常量、常量指针
指针常量,由于指针本身是个常量,所以无法更改,只能初始化的时候赋值;指针数组是一个数组,元素都是指针类型。数组指针是一个指针,一个指针,一个;原创 2025-01-15 14:47:32 · 174 阅读 · 0 评论 -
C++ vector容器
vector是c++标准模板库STL提供的一个实现动态数组的类。c++11新语法foreach。原创 2025-01-15 13:00:12 · 186 阅读 · 0 评论 -
类 继承
当基类构造函数中调用虚函数,此时由于派生类还没有构造,所以这个时候的虚函数还是静态绑定,调用的时基类的虚函数当派生类构造后,由于派生类中重写了虚函数,所以这个时候虚函数变成了动态绑定,调用的就是派生类重写的虚函数析构时,当派生类析构以后,派生类重写的虚函数也随之消失,再调用(在基类的析构函数中调用)虚函数时,调用的是基类的虚函数;(这里又变成了静态绑定)原创 2025-01-14 18:58:12 · 711 阅读 · 0 评论 -
malloc 和 new 的区别
并且呢,这个malloc也是可以用来给类分配内存的,但是,仅可以说是这个例子是可以了,类的情况一但复杂,对于普通的数据类型来说free和delete没有什么区别,delete和delete[]没有什么区别。而delete[]不仅释放内存空间,而delete还会调用析构函数。delete仅仅是释放内存空间。malloc和new没有区别。还会调用每一个元素的析构函数。且调用第一个元素的析构函数。对于普通的数据类型来说。对于普通的数据类型来说。free仅是释放内存。原创 2025-01-13 21:43:41 · 332 阅读 · 0 评论 -
友元类 嵌套类
如果把 被嵌套类 的声明细节 写到外层类中,会显得臃肿;所以可以选择把 被嵌套类写到外面(要加作用域,也就是外层类的名称:: ),而外层类里面只写一个。原创 2025-01-13 21:20:57 · 372 阅读 · 0 评论 -
类 静态成员
*(3)类的静态成员函数不能是const;**已经有static了,再加const是没有必要的。(3)静态成员变量的作用域属于类,但静态成员变量的内存空间不属于类;C++17新语法允许在类的说明里面定义(要加inline关键字)int MyClass::a = 1;原创 2025-01-13 17:30:29 · 317 阅读 · 0 评论 -
OOP 面向对象编程 类 (入门)
这样的情况下,推荐写成内联函数内联函数推荐将定义直接写到类中,这样编译时不需要在去别的转换单元中找定义原创 2025-01-13 17:01:02 · 1044 阅读 · 0 评论 -
namespace 命名空间
具有链接属性的对象,且没有定义命名空间,就默认定义在全局命名空间中;原创 2025-01-12 22:51:01 · 193 阅读 · 0 评论 -
联合编程(C语言和C++);编译器 ---入门
链接属性:内部链接属性:该名称仅仅在本转换单元中有效 const,static外部链接属性:该名称在其他的转换单元中也有效 extern,inline 无链接属性:该名称仅仅能够用于该名称的作用域内访问原创 2025-01-12 16:25:26 · 985 阅读 · 0 评论 -
C/C++进阶-函数
(2.2)还有const、static等关键字,直接让函数模板变得极其复杂。(2.3)并且,在函数的实现里,诸如运算、赋值等操作,面对传入进来的是指针、常量等情况,在使用时需要非常注意。原创 2025-01-08 14:40:55 · 1091 阅读 · 0 评论 -
nullptr和NULL的区别
1.表示空指针:当一个变量或对象被声明为指向某个类型的指针,但没有初始化为指向任何对象时,可以使用nullptr来表示这个空指针。2.表示不存在的元素:当访问数组或结构体中的不存在的元素时,可以使用nullptr来表示这个元素不存在。nullptr是一个空指针类型,而NULL是一个整数类型(通常为0)。在表示空指针或空对象时, 推荐使用nullptr。而NULL就当做0使用就好。原创 2023-11-12 00:54:46 · 456 阅读 · 0 评论 -
for、while、do_while怎么选择
for:适合循环次数固定,循环规律非常明显程序。while:使用最多最频繁的循环结构,具有普适性。do_while:适合至少循环一次的循环结构原创 2022-01-07 22:39:33 · 275 阅读 · 0 评论 -
C++运算符优先级
C++运算符优先级优先级多元运算符算术运算符1算术运算符2逻辑运算符位运算符1位运算符2位运算符3隐式类型转换强制类型转换IO流的格式控制1IO流的格式控制2I/O流的格式控制3优先级运算符运算符具有优先级和结合性。优先级:级别高的先运算,级别低的后运算。例如: */ 高于 + -结合性:自左向右结合还是自右向左结合。例如:1+2+3,+自左向右结合多元运算符运算符根据运算符对操作数的要求不同,分成:一元运算符:仅需要一个操作数的运算符,例如++等二元运算符:需要两个操作数的原创 2022-01-07 14:51:08 · 3404 阅读 · 0 评论 -
C/C++基本数据类型所占字节
int: 4bit //int类型长度等于机器字长(16位机:int=2bit; 32位机:int=4bit)float: 4bitdouble: 8bit原创 2022-01-07 14:25:24 · 833 阅读 · 0 评论 -
指针的间接访问(C++)(int **ppva)
int ***pppva; pppva=&ppva;原创 2022-01-07 13:46:00 · 737 阅读 · 0 评论 -
(C++)cin.getline()和cin.get()的区别
cin.get(); //读取到数值装不下了,就自己加个\n结束cin.getline(); //读取到\n,然后看数组能装多少就装多少原创 2021-12-20 17:06:40 · 1027 阅读 · 0 评论