C++知识点点点点点(5)

  • debug与release

debug:调试模式,包含调试信息,容量比release大很多,并且代码不会进行任何优化,便于调试。

release:发布模式,不对源代码进行调试,编译时对应用程序的速度进行优化,优化程序的代码大小和运行速度。

 

  • C++函数后的const

非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误),表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中,任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用);唯一的例外是对于mutable修饰的成员。加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const对象调用。

参考:https://www.cnblogs.com/llxblogs/p/7709509.html

 

  • STL泛型编程

面向对象编程关注的是编程的数据方面,而STL泛型编程关注的是算法。模板使得算法独立于存储的数据类型,而迭代器使算法独立于所用的容器类型。

 

  • C++三大特性:封装、继承、多态

       封装:将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对象的使用者和设计者分开,以提高软件的可维护性和可修改性

       继承:新类从已有类那里得到已有的特性,继承可以扩展已存在的代码,目的也是为了代码重用

       多态:“一个接口,多种方法”

                编译时的多态性:函数/操作符的重载 >>静态联编

                运行时的多态性:通过派生类和虚函数实现 >>动态联编

 

  • C++类型转换

       

       参考:https://www.cnblogs.com/evenleee/p/10382335.html

 

  • volatile关键字

       与const对应,用来修饰变量,当要求使用 volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。

 

  • 数组初始化

       只有在定义数组时才能初始化,不能将一个数组整体赋值给另一个数组(可分别赋值),即数组不能拷贝

       因为数组不能拷贝,所以无法以值传递的方式传递数组,函数也不能返回数组;但是可以以值传递的方式传递指针,也可以从函数返回指针;

       部分初始化时,其余的值为0;

 

  • 浅拷贝与深拷贝

浅拷贝:只拷贝指针的值,引用语义

深拷贝:重新分配内存空间,值语义

 

  • C++空类,默认产生的成员函数

默认构造函数;拷贝构造函数;拷贝赋值运算符;析构函数;取地址运算符;取地址运算符const

 

  • 虚函数

虚函数的作用是通过基类指针或引用调用虚函数时发生动态绑定(动态多态);

构造函数不能是虚函数,虚函数属于对象,必须先由构造函数生成对象;

静态成员函数不能是虚函数,静态函数不属于对象,不含有this指针而虚函数属于对象。

 

  • STL六大组件

容器、算法、迭代器、仿函数、配接器、配置器

 

  • STL容器

C++11新增:array、forward_list、unordered_set、unordered_multiset、unordered_map、unordered_multimap

序列容器:按线性序列来存储某类型值的集合,每个元素都有自己特定的位置,主要有vector、deque、list、array;

        关联容器:它更注重快速高效的检索数据的能力,根据键值key来检索数据。容器中成员在初始化后都是按一定顺序                            排好的,关联式容器主要有set、multiset、map、multimap;

        容器适配器:对已有容器进行某些特性的再封装,它不是一个新容器,主要有stack(堆栈)、queue;

        

set :不能够对值修改

map:只能修改value,key不能修改。

参考:https://blog.csdn.net/ETalien_/article/details/89439892

array:固定大小的顺序容器,使用静态(栈)内存,底层数组结构同vector为数组。

list:底层数据结构为双向链表,不支持随机访问(没有“[ ]”方法),可通过迭代器访问

preview

preview

参考:https://zhuanlan.zhihu.com/p/33999939https://zhuanlan.zhihu.com/p/147676383

https://www.jianshu.com/p/5446e0534b36

 

  • 数组

用于函数头或函数原型中,int arr[ ]与int* arr含义相同,arr均为指针,表示数组的首地址;

数组名即为指针,首地址元素的指针:arr = &arr[0];

取地址运算符作用于指针时,返回整个数组的地址,即返回数组大小内存块的地址:&arr +1,加整个数组的长度;

将指针/数组名加1,实际上是加上了一个与指针指向的类型的长度(以字节为单位)相等的值:arr[i] = *(arr+i)

 

  • 指针、引用

相同点:都能提供对其他对象的间接访问

不同点:

             1) 引用并非对象,是对一个已存在的对象起的一个别名;指针本身为一个对象,允许对指针进行赋值和拷贝。

             2) 引用定义必须初始化不存在指向空值的引用;指针可不进行初始化,可指向空值(野指针)。

             3) 引用初始化之后不能改变所指对象,指针可改变所指对象。

 

  • sizeof(指针)、sizeof(引用)、sizeof(数组)

*sizeof:返回一个对象或类型所占的内存字节数

sizeof(指针):指针的大小,取决于系统位数,与所指对象没有关系

sizeof(引用):引用对象的大小

sizeof(数组):数组的大小

 

  • sizeof(结构体)、sizeof(联合体)、sizeof(函数)、sizeof(string)、sizeof(char[ ])

sizeof(结构体):存在一个字节对齐问题;空结构体的sizeof值为1,分配一个字节空间用于占位

sizeof(联合体):联合体的内存组织形式为重叠式,各成员共享一段内存,所以值为每个成员sizeof最大值

sizeof(函数):函数返回值类型的大小,sizeof(函数名(实参表))

sizeof(string):大小是固定的,字符串所占的空间是从堆中动态分配的,与sizeof无关

sizeof(char[ ]):C风格的字符串,返回 字符数+1,多出的一个为结尾的空字符“\o”

**string可直接由另一string赋值,char不可以,均以空字符串“\o"结尾

https://www.cnblogs.com/huolong-blog/p/7587711.html

 

  • sizeof、strlen

strlen:常规函数,接受一个C-风格字符串作为参数,并返回该字符串包含的字符数

 

  • 数组退化

在C++中,数组不会按值传递,而是传递第0个元素的指针(首地址),数组退化为指针。

数组不退化为指针的情况:

https://blog.csdn.net/PleasantlY1/article/details/81668308

 

  • 内存对齐 

https://zhuanlan.zhihu.com/p/30007037

 

  • 用户态、内核态

用户态:用户应用进程使用的地址空间

内核态:Linux内核的地址空间

空间切换:当执行系统调用函数时,会发生CPU上下文切换,即用户空间与内核空间的切换

 

  • 原子操作

一个或多个操作步骤,一旦执行,不能够被打断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值