C_C++
文章平均质量分 66
OopspoO
be better
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux 多进程编程基础
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。通俗点讲,进程是一段程序的执行过程,是个动态概念。程序运行必须加载在内存中,当有过多的就绪态或阻塞态进程在内存中没有运行,因原创 2026-03-01 20:20:18 · 1004 阅读 · 0 评论 -
Linux多线程编程基础
根据POSIX标准,原创 2026-03-01 19:59:11 · 803 阅读 · 0 评论 -
死锁问题分析
所谓死锁,就是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种相互等待的现象,若无外力作用,它们都将无法推进下去,此时,系统处于死锁(Dead Lock)状态或系统产生了死锁,这些永远在相互等待的进程称之为死锁进程。由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下将会因为永远分配不到所必需的资源而无法继续运行下去,这就产生了死锁这一特殊现象。原创 2026-03-01 16:23:27 · 1136 阅读 · 0 评论 -
C++杂记——Name Mangling
编程语言组织程序,都有一定的可见范围,比如Java的包、C/C++的文件。就像我们平时使用的文件夹一样,有了这些组织机制,变量、函数的命名在一定程度上就可以重复。但在程序链接时,这些机制多少都要失效一些,就像每个小朋友在家都叫宝宝,到了幼儿园就没办法通过宝宝来区分彼此了。为了解决名字的唯一性,就需要Name Mangling技术。其实说白了就是对名字进行重新编码的一种规则。这就是经过Name Mangling处理后的符号。原创 2026-01-18 16:10:31 · 398 阅读 · 0 评论 -
C++杂记——构造函数
有4种情况,会造成编译期必须为未声明constructor的类合成一个default constructor.C++标准把那些合成物称为implicit nontrivial default constructors.被合成出来的constructor只能满足编译期(非程序)的需要。原创 2026-01-18 15:32:16 · 746 阅读 · 0 评论 -
C++杂记——虚函数之构造函数和析构函数
如果析构函数不是虚函数,那么在调用该函数时(对象被删除时)则只会调用当前对象对应的类的析构函数,这对于直接定义的对象是没有什么影响的,但是对于使用基类指向派生类的指针而言,因为基类指针实际上是基类类型,所以析构时自然只会调用基类的析构函数,这就可能产生内存泄漏(因为派生类的析构函数不被调用)。所以如果确定程序中有基类指针指向派生类的问题,则必须将基类的析构函数指定为虚函数,如此才能确保NEW出来的对象被正确的DELETE。因此,为了保持类的构造过程的清晰与一致性,C++规定基类的构造函数不能是虚函数。原创 2025-10-14 22:20:19 · 765 阅读 · 0 评论 -
Google C++ Style Guide
Google C++ Style GuideGoogle 开源项目风格指南——中文版原创 2025-09-14 23:18:07 · 234 阅读 · 0 评论 -
C++ 面向对象基本概念
我们都知道以前学习的C语言是面向过程的程序设计,它是由过程定义以及过程调用组成的,(简单来说,过程就是实现一个算法的一段代码)而C++是面向对象的程序设计,它是由对象和消息组成。对象是面向对象程序的基本元素。原创 2025-09-02 23:54:46 · 424 阅读 · 0 评论 -
C++的演化历史
C++是一门这样的编程语言:C++是自由的,支持5种编程风格:纵观C++的整个发展和演化的历史,C++经历了5个重要的时期://原创 2025-09-02 23:42:32 · 1064 阅读 · 1 评论 -
C++杂记——闭包Closure
维基百科解释:在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是在支持头等函数的编程语言中实现词法绑定的一种技术。闭包在实现上是一个结构体,它存储了一个函数(通常是其入口地址)和一个关联的环境(相当于一个符号查找表)。环境里是若干对符号和值的对应关系,它既要包括约束变量(该函数内部绑定的符号),也要包括自由变量(在函数外部定义但在函数内被引用),有些函数也可能没有自由变量。原创 2025-03-03 20:17:16 · 626 阅读 · 0 评论 -
C++杂记——RAII (Resource Acquisition Is Initialization)
RAII(Resource Acquisition Is Initialization,资源获取即初始化)是一种C++编程习惯和原则,旨在通过资源的生命周期管理来保证资源的安全和有效使用。RAII的核心思想是将资源的获取和释放绑定到对象的生命周期。当对象被创建时,它会分配相应的资源;当对象的生命周期结束(例如超出作用域时),其析构函数会自动被调用,从而释放资源。它使得我们得以规避“裸new操作”和“裸delete操作”的风险,避免裸new和裸delete可以使我们的代码远离各种潜在风险,避免资源泄漏。原创 2025-03-02 13:29:50 · 590 阅读 · 0 评论 -
C++杂记——返回值优化(RVO,Return Value Optimization)、具名返回值优化 (NRVO,Named Return Value Optimization)
返回值优化(RVO):当函数返回一个对象的临时副本时,编译器可能会调用移动构造函数来优化性能,尤其是在对象较大的情况下。原创 2025-03-02 13:11:13 · 615 阅读 · 0 评论 -
C++11新特性
c++11新增了几种数据类型:、、等原始字符串简单来说,“原生的、不加处理的”,字符表示的就是自己(所见即所得),引号、斜杠无需 “\” 转义,比如常用的目录表示,引入原始字符串后,非常方便。格式如下:类型别名声明C++11标准规定了一种新的方法,使用别名声明(alias declaration)来定义类型的别名:这种方法用关键字using作为别名声明开始,后面紧跟别名和等号,其作用是把等号左侧的名字规定成等号右侧类型的别名。类型别名和类型的名字等价,只要是类型的名字能出现的地方,就能使用类型别名。原创 2025-03-02 13:02:53 · 1375 阅读 · 0 评论 -
C++杂记——RTTI
RTTI(Runtime Type Information)是C++中的一个特性,允许程序在运行时获取类型信息。它主要用于多态(尤其是基于类的多态)时,帮助判断对象的实际类型。RTTI的主要功能RTTI的原理 RTTI的实现依赖于编译器在编译时生成一些额外的信息。注意事项。原创 2025-03-02 00:51:10 · 543 阅读 · 0 评论 -
C++杂记——尾递归
编译器可以做到这一点,因为递归调用是当前活跃期内最后一条待执行的语句,于是当这个调用返回时栈帧中并没有其他事情可以做,因此也就没有保存栈帧的必要了,通过覆盖当前的栈帧而不是在其之上重新添加一个,这样所使用的栈空间就大大缩减了,这使得实际的运行效率会变得更高。注意,后面这段代码的递归也发生在函数末尾,但它不是尾递归。使用尾递归可以带来一个好处:因为进入最后一步后不再需要参考外层函数(caller)的信息,因此没必要保存外层函数的stack,递归需要用的stack只有目前这层函数的,因此避免了栈溢出风险。原创 2025-03-01 23:53:09 · 856 阅读 · 0 评论 -
C++术语
本文总结下C++中的一些术语。原创 2025-02-24 18:58:36 · 964 阅读 · 0 评论 -
C++杂记——Overload、Override和Overwrite
重载的概念最好理解,在同一个类声明范围中,定义了多个名称完全相同、参数(类型或者个数)不相同的函数,就称之为Overload(重载)。重载的特征如下:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。也称为改写,覆盖的概念其实是用来实现C++多态性的,即子类重新改写父类声明为virtual的函数。Override(覆盖)的特征如下:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数列表完全相同;(4)基类函数必须有v原创 2025-02-24 12:12:22 · 2615 阅读 · 0 评论 -
C++对象模型
C++一个对象所占的内存空间是多大?原创 2025-02-24 12:12:04 · 390 阅读 · 0 评论 -
C++多线程编程基础
内存模型——memory model:这是对内存并发访问的一组保证,主要是确保简单的普通访问能按人们的朴素预期工作对无锁编程(programming without locks)的支持:这是一些避免数据竞争的细粒度底层机制一个线程(thread)库:这是一组支持传统线程-锁风格的系统级并发编程的组件,如thread、conditional_variable和mutex。原创 2025-02-23 23:58:52 · 1236 阅读 · 0 评论 -
C++标准库——move、万能引用和forward
当希望用一个移动操作”窃取“一个对象的表示形式时,使用move;当希望转发一个对象时,用forward。因此,forward(x)总是安全的,而move(x)标记x将被销毁,因此要小心使用。调用move(x)之后x唯一安全的用法就是析构或是赋值的目的。显然,一个特定类型可能提供更多的保证,理想情况下类的不变式保持不变。但是,除非你确切知道这类保证,否则不要依赖他们。原创 2025-02-22 22:24:39 · 771 阅读 · 0 评论 -
C++标准库——时间
标准库提供了time_point,用来表示给定纪元的一个时间点,用给定的clock度量。一个纪元(epoch)就是由给定clock确定的一个时间范围,用duration来衡量,从。其中Rep表示一个算术类型,用于表示时钟ticks数;Period表示一个时钟tick周期(可以理解为一个tick多少秒),这里是一个。在chrono中,标准库提供了基本的时钟接口。在我的系统上,他们的输出是一样的。原创 2025-02-22 19:52:22 · 659 阅读 · 0 评论 -
C++标准库——智能指针
auto_ptr是C++11前标准库提供的一种智能指针,它具有unique_ptr的部分特性,但不是全部。weak_ptr指向一个shared_ptr所管理的对象。它最大的限制是,为了保证所有权唯一,在拷贝复制后,会将原auto_ptr中管理的指针置空,此时再次操作原auto_ptr会导致空指针。若使用计数器用来保持使用计数结构活跃,因为在对象的最后一个shared_ptr的声明期结束后,仍可能有weak_ptr活跃。对weak_ptr而言,为了访问它的对象,必须将它转换成shared_ptr。原创 2025-02-22 15:32:22 · 1119 阅读 · 0 评论 -
C++ 标准库——函数对象和函数适配器
在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。许多标准库算法都接受函数对象(或函数)参数,用来控制其工作方式。:g(arg2)等价与f(arg3),其中arg3是通过arg2中的实参替换arg中对应的占位符得到的。另外,bind接受普通表达式做参数,着导致对引用参数而言,在bind看到他们的时候已经被解引用了。所谓函数适配器就是就受一个函数参数,返回一个可以用来调用该函数的函数对象。原创 2025-02-21 23:57:58 · 1055 阅读 · 0 评论 -
C++ STL基础
STL(Standard Template Library,标准模板库),顾名思义是一堆C++模板及其支持工具所组成的库,由于STL基本占据了C++标准库的绝大部分内容,所以有时也用STL指代C++标准库。容器(containers):各种数据结构,是一种class template算法(algorithms):各种常用算法,是一种function template迭代器(iterators):连接容器和算法,是所谓的“泛型指针”原创 2025-02-21 17:08:29 · 1245 阅读 · 0 评论 -
CppCheck
cppcheck 是一个静态代码检查工具,支持c, c++ 代码;作为编译器的一种补充检查,cppcheck对产品的源代码执行严格的逻辑检查。原创 2023-11-17 00:01:21 · 972 阅读 · 0 评论 -
Effective C++笔记
尽可能延后变量定义式的出现。这样可以增加程序的清晰度并改善程序效率。绝对不要重新定义一个继承而来的缺省参数值,因为缺省参数值都是静态绑定的,而virtual函数——你唯一应该覆写的东西——却是动态绑定的。当我们编写一个class template,而它所提供之“与此template相关的”函数支持“所有参数之隐式类型转换”时,请将那些函数定义为“class template 内部的friend函数”。原创 2025-01-24 21:33:38 · 1065 阅读 · 0 评论 -
gcc编译过程简介
fill:#333;color:#333;color:#333;fill:none;原创 2024-06-30 21:54:58 · 981 阅读 · 0 评论 -
C++json库——nlohmann-json
CJSON简单介绍。原创 2023-12-16 15:58:53 · 5415 阅读 · 0 评论 -
C++日志库——spdlog
spdlog是一个仅有头文件的库,只需要拷贝include下面的文件加到本地工程目录并使用支持C++11的编译器编译即可。原创 2024-01-14 21:23:18 · 743 阅读 · 0 评论 -
C标准库函数——printf
C语言printf函数描述C 库函数 int printf(const char *format, …) 发送格式化输出到标准输出 stdout。printf()函数的调用格式为:printf("<格式化字符串>", <参量表>);声明下面是 printf() 函数的声明。int printf(const char *forma...原创 2023-11-14 00:19:30 · 563 阅读 · 0 评论 -
C++的各种初始化
原因同样是创建对象时,要初始类成员的每一个成员(如果没有在初始化列表里面,编译器会自动使用它的默认的构造函数进行初始化,但是它没有默认构造函数,所以会编译报错,所以没有默认构造函数的成员变量需要使用初始化列表进行初始化)能用直接初始化和拷贝初始化的地方都能用列表初始化,而且列表初始化能对容器进行方便的初始化,因此在新的C++标准中,推荐使用列表初始化的方式进行初始化。值初始化和默认初始化一样,对于内置类型初始化为0,对于类类型则调用其默认构造函数,如果没有默认构造函数,则不能进行初始化。原创 2023-03-26 23:05:56 · 8211 阅读 · 0 评论 -
终端输出g_debug()信息
g_debug 输出问题原创 2022-07-27 22:22:34 · 1070 阅读 · 0 评论 -
C标准文档
C标准文档原创 2022-06-30 23:03:26 · 1063 阅读 · 1 评论 -
C++标准文档
c++标准文档链接原创 2022-06-30 22:42:17 · 1508 阅读 · 0 评论 -
C++ primer笔记
c++ primer笔记原创 2022-06-19 22:04:06 · 834 阅读 · 1 评论 -
0x04基础套接字-回射客户服务器
回射客户/服务器 1. 客户端从标准输入获取一行数据,然后发送到服务器; 2. 服务器收到信息后,不处理消息内容,直接将消息内容原封不动地发送给客户端; 3. 客户端收到后,在标准输出上打印出来。TCP回射客户/服务器程序服务器端/************************************************************************* >原创 2018-04-10 15:45:50 · 377 阅读 · 0 评论 -
0x04基础套接字-简单聊天程序实现
聊天程序实现用多进程方式实现点对点聊天 一个进程用来获得输入,一个进程用来获得对方发来的消息客户端//p2pcli.c#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include原创 2018-04-10 15:46:31 · 380 阅读 · 0 评论 -
0x00数据结构——C语言实现(单链表)
0x00数据结构——C语言实现(单链表)/*filename:singly_linked_list.h*//* 单链表(singly linked list)是一种最简单的链表表示,也叫做线性链表。 用它来表示线性表时,用指针表示结点间的逻辑关系。 Functions: (在链表中增加附加头结点的版本) 创建一个空线性表 将链表置为空表 计算表长度 ...原创 2018-04-23 21:09:23 · 497 阅读 · 0 评论 -
0x00数据结构——C语言实现(双链表)
0x00数据结构——C语言实现(双链表)/*filename:double_linked_list.h*//* 双链表(double linked list) Functions: (在链表中增加附加头结点的版本) 创建一个空线性表 将链表置为空表 计算表长度 返回附加头结点的地址 搜索函数:找x在表中的位置,返回表项位置 定位函数...原创 2018-04-23 21:12:47 · 448 阅读 · 0 评论 -
0x00数据结构——C语言实现(单向循环链表)
0x00数据结构——C语言实现(单向循环链表)/*filename:circular_list.h*//* 循环链表(circular list)是另一种形式的表示线性表的链表,与单链表不同的是, 表尾结点的link域中不是NULL而是存放指向链表开始结点的指针。 Functions: 创建一个空线性表 计算表长度 返回附加头结点的地址 搜索函数:...原创 2018-04-23 21:16:54 · 581 阅读 · 0 评论
分享