自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

YY_Song 's blogs

眸子清亮,脑子灵光。

  • 博客(65)
  • 收藏
  • 关注

原创 IPC - 消息队列(Message Queue)- 使用

Message QueueXSI IPCIPC标识IPC键值IPC对象的访问IPC对象的权限和所有者结构体消息队列消息特性消息队列属性结构体打开或创建消息队列控制消息队列发送消息队列接收消息队列发送消息队列实例代码运行接收消息队列实例代码运行参考资料XSI IPCXSI(Unix System Interface and Headers):代表了一种Unix系统的标准。XSI IPC,依托标识符和键来实现的,如同管道靠文件描述符来实现一样。有三种IPC我们称作XSI IPC,即消息队列、信号量、共

2021-06-16 17:41:20 959

原创 IPC - 命名管道(fifo)- 使用

命名管道-FIFO命名管道函数原型注意事项FIFO出错信息简单应用参考资料命名管道我们前面介绍了匿名管道(pipe),匿名管道实际上就是:内存上的一块缓存。它的主要实现方式是借助于fork之后父进程和子进程会共享之前已经打开的文件描述符,并且父进程关闭fd[0]读端,子进程关闭fd[1]写端来实现的。之所以说它是匿名管道,是因为,它在内核中开辟的缓存并没有一个名字。那么,通过名字就能理解了,命名管道就是在内核中开辟的缓存有自己的名字了。其实,这也就是命名管道和匿名管道之间的区别。命名管道的本质

2021-06-15 16:42:17 401

原创 IPC - 管道(pipe) - 应用

仿写 | 的实现关于IPC为什么需要IPC?IPC的方法?关于管道关于 " | "pipe实现 " | "关于IPCIPC,即Inter-Process Communication(进程间通信)。我们都知道,进程是一段程序的执行过程,是系统进程资源分配和调度的基本单位。那么为什么要引入进程间通信呢?或者说,进程间通信能带来哪些好处?为什么需要IPC?数据传输共享数据通知事件资源共享进程控制上面几点都很好理解,我们可以着重看一下最后一点:进程控制。有一些进程希望能够完全控制另一个进

2021-06-13 15:02:34 353

原创 C++观察者模式(发布-订阅)的使用

观察者模式 - Observer Pattern模式简介介绍优点缺点代码实现场景说明实现代码关键解读运行结果参考资料模式简介观察者模式(Observer Pattern),也叫我们熟知的发布-订阅模式。它是一种行为型模式。介绍观察者模式主要关注的是对象的一对多的关系,也就是多个对象依赖于一个对象,当该对象的状态发生改变时,其他对象都能够收到相应的通知。意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决:一个对象状态改变

2021-05-23 16:22:15 1667 7

原创 C++适配器模式的实现及应用

适配器 - Adapter Pattern模式简介介绍优点缺点代码实现情景模拟代码运行结果参考资料模式简介介绍适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式。意图:将一个类的接口转换成为客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。主要解决:主要解决在软件系统中,常常要将一些“现存的对象”放到新环境中,而新环境的接口是现有对象不能满足的。优点可以让任何两个没有关联的类一起工

2021-05-23 15:22:33 963 3

原创 C++装饰器模式的实现

装饰器模式 - Decorator Pattern模式思想模式简介模式优点模式缺点代码实现情景模拟代码实现运行结果参考资料模式思想模式简介装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。何时使用:在不想增加很多子类的情况下扩展类。如何解决:将具体功能职责划分,同时继承装饰器模式。

2021-05-23 14:30:21 883 1

原创 C++代理模式的实现

代理模式 - Proxy Pattern模式思想简介组成优点代码实现情景代码解读结果参考资料模式思想简介代理模式:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。组成抽象角色:通过接口或抽象类声明真实角色实现的业务方法;真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用;代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己

2021-05-23 13:31:38 194 1

原创 C++工厂模式(简单工厂、工厂方法、抽象工厂)

工厂模式前言为什么要使用工厂模式优点缺点简单工厂(Simple Factory)代码应用工厂方法(Factory Method)代码应用抽象工厂(Abstract Factory)代码应用前言为什么要使用工厂模式主要是对对象的创建进行了一个封装;因此也属于创建型模式。意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决:主要解决接口选择的问题。优点一个调用者想创建一个对象,只要知道其名称就可以了;扩展性高,如果想增加一个产品,只要

2021-05-22 11:41:02 5460 1

原创 C++单例模式的实现(懒汉式、饿汉式)

单例模式-Singleton名词解释动机要点饿汉式实现方式运行结果懒汉式常规实现线程安全版实现精简实现参考资料名词解释数学与逻辑学中,singleton定义为:有且仅有一个元素的集合。单例模式最初的定义出现在《设计模式》(艾迪生维斯理,1994):"保证一个类仅有一个实例,并提供一个访问它的全局访问点。"动机对于系统中的某些类来说,只有一个实例很重要:例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号

2021-05-20 20:55:38 2488 8

原创 通过自定义vector和string来理解move和forward

move、forward前言自定义vector和string的结合测试代码问题剖析move(移动语义)简单总结forward(类型完美转发)前言在前面,我们分别实现了自定义的vector和string:传送仓:《C++实现自定义vector以及allocator》;《从自定义string类型理解右值引用》。那么今天,我们就将二者结合起来:用自定义的vector来存储自定义的string。看看又会有什么问题产生。自定义vector和string的结合我们将两个自定义的代码融合如下:cla

2021-05-20 16:11:18 381

原创 从自定义string类型理解右值引用

理解右值引用前言问题复现自定义string(CMyString)遇到问题图示理解右值引用什么是右值添加右值引用参数的成员方法结果对比前言在之前,我写过一篇:通过自定义string类型来理解运算符重载。在文章末尾,我提出了一个问题:那么如何能够实现不泄露内存,并且提高效率呢?那么,今天就来看看如何解决这个问题。问题复现自定义string(CMyString)首先是对string类型的一个简单实现,代码如下:class CMyString{public: CMyString(const

2021-05-20 14:26:10 944 4

原创 C++实现自定义vector以及allocator

实现vector前言初步实现出现的问题解决问题Allocator(空间配置器)最终结果对比系统自带的前言不知道大家有没有这种感觉,学习了一段时间后,总想着自己能够实现一些标准库里已经提供的东西,比如说STL容器vector、比如数据类型string。一方面是对这个知识可以有进一步的一个认识和了解,另一方面也可以检验自己的掌握程度。基于此,我们今天实现自定义的vector。初步实现通过包含头文件#include <vector>转到文档,我们可以查看系统自带vector的实现:主要

2021-05-20 12:00:05 3071 10

原创 C++线程间的互斥和通信

互斥锁、条件变量、原子类型互斥锁(mutex)模拟车站卖票不加锁的结果加锁后的结果简单总结条件变量(conditon_variable)生产者消费者线程模型产生问题解决问题原子类型(atomic)简单使用改良车站卖票互斥锁(mutex)为了更好地理解,互斥锁,我们可以首先来看这么一个应用场景:模拟车站卖票。模拟车站卖票场景说明:Yang车站售卖从亚特兰蒂斯到古巴比伦的时光飞船票;因为机会难得,所以票数有限,一经发售,谢绝补票。飞船票总数:100张;售卖窗口:3个。对于珍贵的飞船票来说,这个资

2021-05-19 19:55:43 1481 14

原创 C++对象优化

C++对象的优化为什么需要(对象)优化对象使用过程中都调用了哪些方法示例代码:运行结果:结果解释:对象优化及规则优化后的结果具体优化过程对象优化的三条规则为什么需要(对象)优化我们都知道,C语言和C++在程序执行中,都是通过调用一系列的函数来实现的。并且,很多时候,编译器会帮助我们做一系列的事情,比如(在编译类的成员方法的时候,编译器默认添加 this 指针,以此来确定是哪一个对象调用了该成员方法)。得益于编译器或者说系统帮助我们做的一系列事情,我们可以更加方便地使用C++。但是凡事有利必有弊,因为

2021-05-18 19:57:13 351 9

原创 理解虚基类、多重继承的问题

虚基类和多重继承什么是多重继承多重继承的优点关于菱形继承的问题其他多重继承的情况如何解决多重继承的问题什么是虚基类虚基类如何解决问题查看虚基类的内存布局对比普通继承下的内存布局什么是多重继承多重继承,很好理解,一个派生类如果只继承一个基类,称作单继承;一个派生类如果继承了多个基类,称作多继承。如图所示:多重继承的优点这个很好理解:多重继承可以做更多的代码复用!派生类通过多重继承,可以得到多个基类的数据和方法,更大程度的实现了代码复用。关于菱形继承的问题凡事有利也有弊,对于多继承而言,也

2021-05-04 23:20:19 541

原创 理解虚析构函数

虚析构函数示例代码(普通析构)存在问题修改代码(虚析构)相关问题构造函数可以是虚函数吗?什么时候需要虚析构函数?示例代码(普通析构)老样子,我们先来看如下代码:class Base{public: Base(int data) :ma(data) { cout << "Base()" << endl; } // 虚析构函数 virtual ~Base() { cout << "~Base()" << endl; } virtual void

2021-05-03 10:24:33 150 1

原创 从编译器角度理解虚函数、静态绑定和动态绑定

虚函数、静态绑定、动态绑定示例代码示例结果对比代码对比结果虚函数静态绑定动态绑定查看虚函数示例代码我们首先来看这么一段代码,设计了两个类:Base、Derive;Base类包含一个保护的成员变量:ma;以及构造函数和两个show方法(一个不带参数,一个带有参数)。Derive类公有继承Base类:class Derive : public Base;包含一个私有的成员变量:mb;以及构造函数和一个show方法(不带有参数)。class Base{public: Base(int dat

2021-05-02 11:28:26 439 1

原创 通过自定义string类型来理解运算符重载

自定义string类型理解系统自带string类型示例代码功能展示自定义string类型比较运算符(>、<、==)重载输出运算符(<<)重载加法运算符(+)重载下标运算符([])重载完整代码功能对比存在问题理解系统自带string类型在C语言中我们一般使用字符数组来保存字符串。存在诸多不方便的地方:比如数组大小、数组长度、数组扩容等等。为了更好地使用字符串,C++提供了string类型。使用它需要引入头文件:#include <string>。示例代码我们可

2021-04-27 14:37:21 566

原创 从编译器角度理解C++代码的编译、链接

C++代码的编译链接示例代码编译过程预编译编译汇编链接过程相关面试题参考资料由于Windows操作系统下的IDE不好查看编译链接的详细过程,故本文使用Linux操作系统。具体版本:Linux version 4.15.0-30deepin-generic。示例代码示例代码有两个:main.cpp 和 sum.cpp:// main.cpp#include <iostream>using namespace std;extern int gdata;int sum(int,in

2021-04-26 22:50:56 1777 8

原创 从汇编指令角度理解函数调用过程

从指令角度理解函数调用过程示例代码生成指令具体过程参考资料示例代码我们首先来看如下代码:int sum(int a, int b){ int temp = 0; temp = a + b; return temp;}int main(){ int a = 10; int b = 20; int ret = sum(a, b); return 0;}生成指令int sum(int a, int b)// push ebp// mov ebp,esp// sub

2021-04-18 15:55:35 369

原创 进程虚拟地址空间区域划分

进程虚拟地址空间区域划分代码入手简单图示具体解释何为虚拟?为何是4G?user spacekernal space参考资料代码入手首先我们来看一段简单的代码:#include <iostream>using namespace std;int gdata1 = 10;int gdata2 = 0;int gdata3;static int gdata4 = 11;static int gdata5 = 0;static int gdata6;int main(){

2021-04-18 11:12:18 310

原创 C++实现MySQL数据库连接池

ConnectionPool-MySQL项目背景功能点介绍关键技术点MySQL数据库编程压力测试参考资料项目背景常见的MySQL、Oracle、SQLServer等数据库都是基于C/S架构设计的,即(客户端/服务器)架构,也就是说我们对数据库的操作相当于一个客户端,这个客户端使用既定的API把SQL语句通过网络发送给服务器端,MySQL Server执行完SQL语句后将结果通过网络返回客户端。通过网络通信的话就要涉及到TCP/IP协议里的“三次握手”、“四次挥手”等,大量访问时,每一个用户的请求都会对应

2021-04-04 19:47:45 931 1

原创 排序 - 希尔排序

希尔排序前言算法代码辅助函数过程模拟测试代码运行结果复杂度分析参考资料前言我们前面总结了三种排序算法,分别是:冒泡排序、直接选择排序、直接插入排序我们会发现,即使各种排序算法的花样繁多,但是,时间复杂度都是 O(n^2) 。我们都能理解,一个优秀的排序算法的首要条件就是速度。然而在很长的时间里,计算机学术界充斥着“排序算法不可能突破 O(n^2)”的声音。终于有一天(1959年),D.L.Shell 提出来了希尔排序,突破了 O(n^2) 的时间复杂度。算法我们前面总结的直接插入排序在某

2021-03-14 16:47:47 417 1

原创 排序 - 直接插入排序

直接插入排序算法代码理解测试代码运行结果复杂度参考资料算法直接插入排序(Straight Insertion Sort)的基本操作:将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。注意:在我们的排序问题中,通常将 数据元素 称为 记录。代码理解测试代码运行结果复杂度参考资料【1】程杰. 大话数据结构. 北京:清华大学出版社,2011:2....

2021-03-13 10:26:32 447

原创 C++初探智能指针

智能指针什么是智能指针为啥需要智能指针智能指针的原理智能指针的类别简单案例运行结果参考资料什么是智能指针学过C语言的人肯定对“指针”这个概念不陌生,简单来说,指针就是“地址”。那么智能指针是什么呢?“智能地址”吗?准确地来说,智能指针并不能算作是指针。在《C++ Primer Plus》一书中,就这样定义到:智能指针是行为类似于指针的类对象,但这种对象还有其他功能可以看到,智能指针其实是一个类对象。为啥需要智能指针智能指针的原理智能指针的类别简单案例运行结果参考资料...

2021-03-11 21:28:57 125

原创 排序 - 简单选择排序

简单选择排序算法代码理解复杂度分析参考资料算法简单选择排序法(Simple Selection Sort)就是通过n - i次关键字间的比较,从 n - i + 1个记录中选出关键字最小的记录,并和第 i (1 <= i <= n)个记录交换。代码// 对顺序表 L 作简单选择排序void SelectSort(PSqlist L){ int i, j, min; for (i = 1; i < L->length; i++) { // 将当前下标定义为最小值下

2021-03-10 22:13:11 475

原创 C++虚函数的简单理解

虚函数为何要用工作原理内存布局1.只有数据成员的对象2.仅拥有一个虚函数的类对象3.拥有多个虚函数的类对象简单总结参考资料为何要用在了解虚函数的原理、实现之前,我们肯定心里会有所疑惑,为什么需要用到虚函数呢?普通函数存在什么弊病吗?带着这个疑惑,我们可以来看看官方给出的解释:虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异,而采用不同的策略。很迷惑对吧?我们再来看看别的博主给出的解释:

2021-03-08 22:52:14 243

原创 C++标准模板库STL模板类vector浅析

容器vector什么是vector可执行的操作测试代码运行结果参考资料什么是vector解释一:在计算中,矢量(vector) 对应数组,而不是数学矢量。在数学中,可以使用N个分量来表示N维数学矢量,因此从这方面讲,数学矢量类似一个N维数组。然而,数学矢量还有一些计算机矢量不具备的其他特征,如内乘积和外乘积。计算机矢量存储了一组可随机访问的值,即可以使用索引来直接访问矢量的第10个元素,而不必首先访问前面9个元素。解释二:vector 容器是 STL 中最常用的容器之一,它和 array

2021-03-07 15:41:15 535

原创 复习之数据结构_带头结点的双向链表

带头结点的双向链表简单理解增删图解头文件代码文件测试用例参考资料简单理解我们会发现,单链表由于只有next域,所以,如果想要访问某个元素的前驱结点,那么只能从头开始遍历到该元素的前一个元素。效率非常的低下。于是,为了方便的访问前驱、后继,双向链表应运而生。如上图所示,就是一个简单的双向链表示意图。双向链表共含有三个元素:1、存放数据;2、后继指针域;3、前驱指针域。增删图解双向链表的插入和删除操作需要特别注意边界问题。正常的插入如下图:插入情景:将新结点 p 插入到指定结点 q 的

2021-02-26 20:18:17 256

原创 复习之数据结构_带头结点的循环单链表

带头结点的循环单链表循环单链表简单理解头文件(.h)代码文件(.cpp)代码测试参考资料循环单链表简单理解前面复习了单链表,单链表的尾结点的特点是next域为NULL(空);而我们今天要复习的循环单链表,和单链表基本类似。区别就在于:循环单链表的尾结点的next域为头结点。头文件(.h)老规矩,先上头文件:笔者这里的命名为:clist.h#pragma once// 带头结点的循环单链表// 尾结点的next指向头结点typedef struct CNode{ int data;

2021-02-26 12:28:05 1118

原创 C++简单实现C4.5算法生成决策树

C4.5算法实现C4.5算法简介算法解析示例数据数据处理计算类别信息熵计算各属性信息熵计算信息增益计算属性分裂信息度量计算信息增益率代码实现文件调用关系关键代码运行结果编译器结果理解结果参考资料C4.5算法简介C4.5算法是由Ross Quinlan开发的用于产生决策树的算法。该算法是对Ross Quinlan之前开发的ID3算法的一个扩展。C4.5算法产生的决策树可以被用作分类目的,因此该算法也可以用于统计分类。C4.5是一系列用在机器学习和数据挖掘的分类问题中的算法。它的目标是监督学习:给定一个数

2021-02-25 17:22:00 2249 2

原创 C++_const_浅析

const简单理解constconst的作用const的不同修饰变量修饰指针函数使用类中使用记忆小技巧参考资料简单理解const我们经常使用到const,简单来说,const就是不允许改变的意思。C语言中的const:它限定一个变量不允许被改变,产生静态作用。C++中的const:const 限定符,它把一个对象转换成一个常量。const的作用1)欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变他了;2)对指针而言,可以指定指针本身为co

2021-02-12 19:17:42 181

原创 如何在main函数之前和之后执行别的函数?

如何在main函数之前和之后执行别的函数?问题引入C++解决方案C语言解决方案Windows(VC、VS):Linux(gcc):参考资料问题引入我们通常会认为,程序的执行总是从main函数开始,到main函数结束。其实,这个说法并不准确。具体细节,我们先不深究,我们就来说说,既然程序并不总是从main函数开始,到main函数结束。那我们可不可以在main函数之前和之后执行其他的函数呢?C++解决方案C++的解决方案很好理解:基于全局变量在主函数运行之前的特性,定义一个全局的对象,在构造函数和

2021-02-12 14:16:08 1534

原创 C++_this指针_初理解

this指针问题切入什么是this指针?this指针怎么用?this指针的注意点参考资料问题切入我们在学习C++的时候,会了解到面向对象的思想以及类与对象。简单的来说,类是一个设计图纸:我们现实客观世界的实体经过分析和抽象之后得到我们主观世界里的抽象类别,也就是你脑子里的各种idea,当你把脑子里的这种抽象类别设计出来之后,就得到了类(class),最后对class进行实例化得到我们的对象(object)。整个过程可以用如下的图来理解:关于对象的模型,可以存在如下两种方案:毫无疑问,为了节

2021-02-11 18:13:12 229

原创 C++_new_浅析

浅析newnew表达式内存泄露比较 malloc && freenew的三种调用参考资料new表达式创建并初始化拥有动态存储期的对象,这些对象的生存期不受它们创建时所在的作用域限制。解释:new 表达式尝试申请存储空间,并在已申请的存储空间上,尝试构造并初始化为一个无名对象,或无名对象的数组。new表达式返回一个指向所构造的对象或者对象数组的纯右值指针。注: 纯右值:满足下列条件之一:1)本身就是赤裸裸的、纯粹的字面值,如3、false;2)求值结果相当于字面值或是一个不具名

2021-02-09 10:21:54 189

原创 C++_inline函数(内联函数)浅析

inline函数浅析内联函数处理方式内联函数与普通函数的区别内联函数与static修饰的函数的区别内联函数与宏的区别使用场景汇编层次内联的处理参考资料内联函数在C++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别地引入了inline修饰符,表示为内联函数。如下简单示例:inline int Max(int a, int b){ return a + b;}处理方式内联函数的处理方式是在函数的调用点直接代码展开。在计算机系统下,如果频繁的调用会造成较大的时间开销。内联

2021-02-08 09:15:22 162

原创 复习之数据结构_带头结点的单链表

带头结点的单链表带头结点的单链表插入图解头文件(.h)代码文件(.cpp)简单测试参考资料带头结点的单链表如果说,顺序表是逻辑相邻,物理也相邻的话,那么链表就是逻辑相邻,物理不一定相邻了。对应在计算机中,顺序表,是开创了一块连续的内存空间,用于存放一定的数据。那么链表开辟的内存空间就不一定是连续的、同一块空间了。顺序表(不定长)示意图:单链表(带头结点)示意图:插入图解对于插入来说,假定:要插入位置的结点为p;插入新的结点为n。那么到底是先p->next = n->next呢

2021-02-03 13:15:02 551

原创 复习之数据结构_不定长顺序表

不定长顺序表不定长顺序表头文件(.h)代码文件(.cpp)简单测试参考资料不定长顺序表顺着我们上次的继续总结,不定长顺序表,顾名思义,就是长度不固定的顺序表,这个不固定意味着动态扩容,每当目前已有的容量耗尽用完时,便自动扩容,使得长度一直发生变化。废话不多说,我们直接上代码。头文件(.h)首先是头文件,需要注意的是,与定长顺序表不一样的地方,不定长的顺序表的结构体成员有三个,比定长的多了一个总容量大小,这个总容量大小也就控制着动态扩容的进行。当数据不断插入,当前有效数据的个数等于总容量的时候,意

2021-02-02 20:47:30 111

原创 复习之数据结构_定长顺序表

定长顺序表关于数据结构定长顺序表头文件(.h)实现文件(.cpp)简单测试关于数据结构前言:数据结构一直是大多数人比较头疼的课程,里面弯弯绕很多,但是不可否认的是,他真的很重要。无论你选择考研还是找工作,数据结构一定是考试、面试、笔试的一个重点。博主就是之前学习了数据结构,但是前学后忘,最近刷一些算法题的时候,发现真的,忘得一干二净了。于是痛下决心,好好复习,整理成博客。故,废话不多说,我们开始总结吧。关于数据结构:数据结构:线性表(链表、顺序表)(栈、队列、串);树形结构(二叉树);

2021-02-01 18:03:45 86

原创 C++ - 了解Name Mangling

C++ - 了解Name Mangling函数重载什么是 Name Mangling?Name Mangling 如何实现的?如何禁用呢?参考资料名字粉碎?命名粉碎?名称改编?or 命名倾轧(实属拗口)?函数重载函数重载:为方便使用,C++允许在同一范围内声明几个功能类似的同名函数,但是这些同名函数的形式参数(个数、类型、顺序)必须不同,也就是说用同一个函数完成不同的功能。注:在C语言中,不支持函数的重载,即C语言中一个函数不能与另一个函数重名。重载原则:①函数名相同,函数的参数列

2020-12-07 17:01:21 310

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除