
【c++】
QX_a11
认真生活
展开
-
git commit --amend的用法
1、用于修改上次提交。应用场景:在公司,写了一个功能提交到老大,老大看了代码后,眉头一皱balabalba说一堆需要改的地方,你回来改正后,要是直接使用,git add 、git commit -m"xxxxxx"、git push那就等着被吐槽吧,这样提交会让老大那里有两条内容,这时候老大就需要合并才可以。所以为了老大更好的管理提交,你就需要,git add 、git commit --amen...原创 2020-01-14 17:10:33 · 2275 阅读 · 0 评论 -
【C++】设计模式——观察者模式
观察者模式观察者模式分为两个角色:观察者和监听者;观察者的作用是观察事件,并且将发生的事件通知给对本事件感兴趣的监听者。监听者的作用是处理发生的事件。其中关键的一步是将监听者和感兴趣的事件保存起来,反过来,一个事件也会由多个监听者处理;对于特定的事件而言,这是一个一对多的关系。基本思路Listener:监听者,执行相应的事件。observable:观察者分为两个模块(1)先利用...原创 2019-05-12 00:11:09 · 289 阅读 · 1 评论 -
强符号、弱符号、强引用、弱引用
强符号与弱符号当多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候会出现符号重复定义的错误。对于C/C++语言来说,编译器默认函数和初始化了的全局变量为强符号,未初始化的全局变量为弱符号。我们也可以通过GCC的"__attribute__((weak))"来定义任何一个强符号为弱符号。需要注意的是强符号和弱符号都是针对定义来说的,而不是引用。如下面的这段程序:exter...原创 2019-05-11 10:05:04 · 784 阅读 · 0 评论 -
【C++】volatile关键字的作用
volatile的作用volatile关键字是防止在共享的空间发生读取的错误。只保证其可见性,不保证原子性;使用volatile指每次从内存中读取数据,而不是从编译器优化后的缓存中读取数据,简单来讲就是防止编译器优化。在单任务环境中,如果在两次读取变量之间不改变变量的值,编译器就会发生优化,会将RAM中的值赋值到寄存器中;由于访问寄存器的效率要高于RAM,所以在需要读取变量时,直接寄存器中...原创 2019-04-29 23:59:22 · 4743 阅读 · 0 评论 -
C和C++的区别(1)——函数重载
C和C++的区别在C++中,函数重载就是在同一作用域下,函数名相同,而参数列表不同的一组函数;而在C语言中不支持函数重载;这是因为C++编译后在库中的名字与C语言的不同;假设某个函数的原型为void fun(int x,int y)。该函数被C编译器编译后的库中的名字为_fun;而被C++编译器则会产生像_fun_int_int这样的名字。函数重载(1)函数重载指的是同一作用...原创 2019-04-25 00:04:33 · 363 阅读 · 0 评论 -
【C++】什么情况下会产生临时变量
临时变量是只在调用期间有效,具有常性的一种变量。一、值传递在返回值以值传递(传值和传指针)的形式返回时,会生成临时变量。int sum(int a,int b){ return a + b;}编译器会将结果a+b的值拷贝给临时变量,最终返回的是临时变量;二、具有引用类型在函数调用中,如果形参是引用的类型的情况下:当实参和形参的类型不匹配会产生临时变量;...原创 2019-04-28 21:56:45 · 2294 阅读 · 0 评论 -
不使用其他判断语句和第三方变量,实现两个数的交换和比较
一提到两个变量的交换与比较,一般首先都会想到使用if、? :、switch等判断语句;但在面试的时候,经常会问到不使用判断语句的情况下,如何实现两个变量的交换和比较?变量a、b找出其中比较大的一个:方法一:int max = ((a + b) + abs(a - b)) / 2方法二:int max(int a,int b){ int c = a - b;/...原创 2019-04-24 11:51:55 · 253 阅读 · 0 评论 -
C与C++的区别(3)——指针与引用
我们在学习c语言的时候,知道函数传参有两种,值传递和地址传递;而在C++中,多了一个引用的概念,引用就是给已存在的变量取了一个别名,编译器不会给引用开辟新的空间,与其引用的变量共用一块空间。引用于指针的区别引用:引用就是对某一变量的一个别名,对引用的操作对变量直接操作完全一致;int a = 10;int *p = a;&在此不是求地址运算,而是起到标识作用。 ...原创 2019-04-28 17:43:01 · 322 阅读 · 0 评论 -
C与C++的区别(2)——new和malloc的区别
一、本质区别在C++中引入更多的关键字,比如:new和delete;而malloc和free是库函数,需要头文件的支持;二、申请的空间所在的位置new关键字为对象分配的空间在自由存储区内。而molloc是从堆上分配内存;C/C++内存通常分为:堆、栈、自由存储区、全局/静态存储区、常量存储区;自由存储区:是C++中通过new和delete动态分配和释放对象的抽象概念;...原创 2019-04-26 21:14:59 · 411 阅读 · 0 评论 -
【c++】内存池的实现
使用内存池的原因:在c++开辟空间和释放空间使用的是new和delete,而new和delete是对内存的操作,对内存进行操作必然需要从用户态转到入内核态,系统在接收到分配一定大小内存请求时,首先查找内部维护的内存空闲块表,并且需要一定的算法找到合适的内存块,由此频繁的new和delect会降低效率,并且在内存中会产生外碎片。默认的内存管理函数还考虑到多线程的应用,需要在每次分配和释放内存时加...原创 2019-04-15 12:33:01 · 296 阅读 · 0 评论 -
【C++】delete与delete[]的区别
c++中对new申请的内存释放方式有delete和delect[]两种方式,那这两者到底有哪些区别呢?可能你见过这样的表述:用new分配内存,就用delect释放内存;使用new[]分配内存,就用delete[]释放内存。具体来讲就是delect释放new分配的单个对象指针指向的内存,delete[]释放new分配的对象数组指针指向的内存。那为什么会这样呢?关于动态申请的内存,分两种情况:...原创 2019-04-21 21:38:29 · 962 阅读 · 0 评论 -
【C++】设计模式之——工厂设计模式的原理与实现
工厂设计模式工厂设计模式提供了生成对象的最佳方法,这一设计模式的优势就在于屏蔽了生成对象复杂的过程。有三种工厂模式,分别为:简单工厂模式 工厂方法模式 抽象工厂模式简单工厂模式原理:工厂生产产品,而这里的产品指的就是对象。在简单工厂模式中,用一个标识对应一个对象的方法,要生成某一产品时,只需要传入对应的标识,这样做的优势是当需要生产大量的对象时,不需要对对象名进行记忆,并且...原创 2019-04-21 18:20:34 · 429 阅读 · 0 评论 -
【c++】继承和组合混搭下的构造和析构顺序
类和类之间有三种关系:①组合关系:has_a a part of的关系②继承关系:is_a a kind if的关系③代理关系:在容器适配器中,屏蔽底层的接口,对外提供新的特性在只有的组合的关系中可直接调用构造;在继承中,先调用基类的构造,后调用派生类的构造;析构的时候只要记住,先构造的后析构,也就是先析构派生类,后析构基类即可。那么在有组合和继承混搭...原创 2019-04-16 11:42:36 · 510 阅读 · 0 评论 -
从面向过程到面向对象
面向过程编程面向过程编程的核心:功能分解(自顶向下,逐步求精)。就是将一个大问题分解成多个小问题,多个小问题再进行分解;解决小问题就会容易很多面向过程最重要的原则:高内聚、低耦合内聚是指模块内部各成员之间关联的紧密程度耦合是指模块与模块之间关联的紧密程度面向过程的特点: 1)分析解决问题所需要的步骤 2)利用函数实现各个步骤,解决个问题面向过程编程的主要缺点就是 ...原创 2019-04-16 10:51:37 · 285 阅读 · 0 评论 -
【c++】单例模式的实现
单例模式也称单件模式,单子模式,是使用最广泛的设计模式之一;意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。一、单例模式用户访问唯一实例的方法只有getInstance()成员函数。如果不通过这个函数,任何创建的尝试都将失败,因为类的构造函数是私有的。getIntance()使用懒惰初始化,也就是说它的返回值是当这个函数首次访问时被创建。这是一种防弹设...原创 2019-03-12 00:21:15 · 1213 阅读 · 0 评论 -
【c++】函数调用约定
函数的调用约定,当一个函数被调用时,参数的传递以及返回值以什么样的方式回到调用函数;函数的调用约定就是指参数和返回值是怎么样传递的,以及是由谁平衡堆栈的。函数的调用约定主要针对三个问题:1.函数符号的生成与编译后的名称2.实参的入栈顺序3.形参的开辟与清理方式一、__cdecl调用约定cdecl是c标准的调用约定;声明方式为:int function(int...原创 2018-11-19 13:15:31 · 416 阅读 · 0 评论