C++
z-k
这个作者很懒,什么都没留下…
展开
-
++i与i++的区别
除非必须,否则不用递增递减运算符的后置版本因为前置版本运算符避免了不必要的工作,它把值操作后直接返回给了运算对象而后置版本的需要将操作前的值存下来,以便返回给运算对象,是一种浪费...原创 2019-03-05 20:43:47 · 171 阅读 · 0 评论 -
C++const总结
目录const需要注意的地方怎么判断const对谁起作用?const关键字作用const的使用情况:1、常变量:const类型说明符 变量名2、常量引用:const类型说明符 &引用名3、常对象:类名const对象名4、常成员函数: 类名::fun(形参)const5、常数组:类型说明符const数组名[大小]6、常指...原创 2019-03-14 21:09:26 · 224 阅读 · 0 评论 -
STL中容器底层数据结构总结
vectorvector底层就是一块内存(可以说是一个数组),由3个指针管理详细参见https://blog.csdn.net/weixin_40673608/article/details/87103742listlist底层是一个双向链表详细参见https://blog.csdn.net/weixin_40673608/article/details/8786502...原创 2019-03-07 22:31:58 · 787 阅读 · 0 评论 -
指针和引用的区别
基本区别:指针存的是一个地址,指向一块内存,本身占空间,使用的时候需要用*解引用引用是别名,不占空间,使用的时候直接使用由于引用是别名,所以引用必须初始化,不能为空,且一旦初始化,引用就不能变了,但指针可以,指针可以不初始化,指针也可以改变使用建议:如果想使用一个变量指向一个对象,且该变量在某些情况下可能会变,那么就应该使用指针如果变量肯定指向一个对象,且不会变,那么就使用...原创 2019-03-07 22:02:52 · 91 阅读 · 0 评论 -
sizeof和strlen的区别
sizeof是运算符,计算的是内存分配的多少strlen是函数,所在的头文件为<string.h>,计算的是字符串的长度,即从开始到第一个'\0'的长度(不包括'\0') char str[5] = "123"; int a = strlen(str); //3 int b = sizeof(str); //5 char *str...原创 2019-03-07 21:29:11 · 92 阅读 · 0 评论 -
C++内存管理
目录C++存储区分类1.栈2.堆3.自由存储区4.全局/静态存储区5.常量存储区堆和栈的对比堆和自由存储区的区别C++存储区分类1.栈就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。2.堆就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。...原创 2019-03-14 22:12:24 · 96 阅读 · 0 评论 -
C++内存对齐
目录C++各基本类型的大小内存对齐内存对齐是什么为什么要内存对齐#pragma pack(n)的作用C++各基本类型的大小类型 32位 64位char 1 1short int 2 2int 4 4long int 4 8long long int 8 8...原创 2019-03-14 14:51:52 · 173 阅读 · 0 评论 -
C++虚函数原理
目录虚函数表的布局无继承关系的虚函数存在继承关系的虚函数单继承:子类不覆盖基类虚函数的情况单继承:子类覆盖了基类的一个虚函数的情况单继承:定义了基类没有的虚函数多继承:存在虚函数覆盖同时又存在自身定义的虚函数的类对象布局多继承:如果有三个基类: 虚函数表分别是有, 没有, 有父子对象指针间的转换与函数调用虚函数表的布局无继承关系的虚函数如果一个类中声...原创 2019-03-14 13:50:46 · 737 阅读 · 0 评论 -
struct在C和C++中的区别
C++中把struct当成类处理,只不过和类的一点小区别是struct中访问权限默认是public,而类中访问权限默认是private而在C中,struct是抽象数据类型基于这个,会有以下的区别1、C中定义的时候需要在前面加上struct,而C++中不用2、C++把struct当成类处理,所以C++的struct中可以自己设定访问权限,而C中没有访问权限2、C++把struct...原创 2019-03-06 22:27:28 · 2389 阅读 · 0 评论 -
new和malloc的区别
正常指的new和delete是一个关键字,不可重载而operator new 和 operator delete 是标准库函数,可以重载new和delete的细节:使用new操作符会发生什么:①调用operator new 函数申请一块内存②调用构造函数在申请的内存上构造一个对象③返回一个指向该对象的指针使用delete操作符会发生什么:①调用析构函数②调用op...原创 2019-03-06 22:01:47 · 112 阅读 · 0 评论 -
内存泄露几种情况
1、new了之后没有delete掉2、释放对象数组时使用delete而没有使用delete[ ]3、缺拷贝构造函数当类中有用指针指向另一个内存,且没有定义拷贝构造函数时,编译器会使用默认拷贝构造函数,把原来对象的指针的值赋给新的对象中对应指针的值,这时2个指针会指向同一个内存,当其中一个对象析构后,内存被释放,第二个对象析构时,会重复释放这个已经释放过的内存,造成二次释放4、没有重...原创 2019-03-06 20:32:10 · 375 阅读 · 0 评论 -
static作用
1、隐藏全局变量在全局变量/函数前,加上static,就可将其定于成静态全局变量/函数,,加了static的变量/函数只能在同它所在的文件中使用,而未加static的变量/函数可以在其它文件中使用,这样的话static就起到了隐藏的作用2、修饰函数体内的局部变量正常的局部变量存在于栈中,随着而在局部变量前加static,就可以声明为静态局部变量,静态局部变量在函数第一次被调用时会初始化...原创 2019-03-05 22:52:11 · 156 阅读 · 0 评论 -
unordered_map自定义键类型
自定义类型:struct my_key { int num; string name;};1、由于unordered_map是采用哈希实现的,对于系统的类型int, string等,都已经定义好了hash函数,所以如果我们引入新的自定义类型的话,系统并不知道如何去计算我们引入的自定义类型的hash值,所以我们就需要自己定义hash函数,告诉系统用这种方式去计算我们...原创 2019-09-06 11:48:59 · 4288 阅读 · 0 评论