本文主要用于笔者c/c++学习记录,水平有限,不对之处还望见谅,如果可以指正不胜感激。
1、STL分类
2、template<typename T,int N>
模板只有在调用之时才会创建
3、栈是大小固定且默认的区域,堆是大小随着使用动态更改的区域
4、c/c++内存区域划分
5、回调函数(callback):可以在函数参数中调用函数指针作为函数参数使用;
6、Lambda表达式一般形式:[](int a){func;};
7、不轻易使用using namespace 的一些原因:
a、可以很清晰的看出你所使用的东西来自哪个名称空间;
b、可以区分不同空间里的同名函数
c、不要在头文件中使用using namespace,头文件容易被引用造成名称空间滥用
d、名称空间的使用主要是为了避免命名冲突,名称空间可以嵌套
8、Union 联合(特殊的类)
联合与结构的区别在于:结构体中各成员有其各自的内存空间,结构体变量的长度为其各成员之和,但是联合变量的长度等于各成员之中最长成员的长度,即各成员共用一段内存;
此处的共用是指联合变量可被赋予任一成员的值,但是每次只能赋给一个成员值,新值冲去旧值;
联合成员不可进行初始化赋值,联合内部不可使用静态引用及类
联合可以嵌套结构体
9、构造函数及析构函数
只要基类析构函数是虚函数,那么派生类构造函数不论是否使用virtua声明,都将自动声明为虚析构函数。另外,析构函数可以为虚函数,构造函数不可为虚。构造函数声明为虚是为了防止内存泄露,在调用父类析构函数的时候自动调用子类析构函数。
构造函数不可为虚的部分原因:
主要原因:
a、先从虚函数的作用来说,虚函数用于通过父类指针或者引用,在调用它本身那个函数的同时,可以完成对其子类相应函数的调用(如析构函数),但是构造函数是在创建对象时自动调用的,不存在一个“爷类”构造函数来调用它本身的构造函数;
次要原因:
b、创建一个对象需要确切知道其类型,但是虚函数是在运行时确定类型的,在构造一个对象时,由于对象还未创建成功,编译器是无法知道对象实际类型的;
c、vptr(虚表)存储在对象空间之中,对象还未创建,没有vptr可供调用。
10、c++数据类型转换
a、static_cast: 主要用于:基本类型转换(int 转char);类的上行转换(子类指针或引用转换为基类(安全));类的下行转换(不安全);
b、dynamic_cast:主要用于类的指针或者引用的转换。
类的上行转换 (安全);类的下行转换(在有虚析构函数定义的情况下安全,同时RTTI需要打开)
c、const_cast:用于改变变量的常量属性;
d、reinterpret_cast:用于非关联类型转换,用于进行各种不同类型的指针之间、不同类型的引用之间以及指针和能容纳指针的整数类型之间的转换。转换时,执行的是逐个比特复制的操作。
11、多线程分类:a、基于进程的多任务是程序的并发执行;b、基于程序的多任务处理是同一程序片段的并发执行。
12、c++引用与指针的区别与联系
a、指针可为空,引用不行
int *p = NULL; 可以
int &p = NULL; 不行
b、指针可以为通用指针,引用不行
int *p ;可以
int &p; 不行
c、编译器会为指针单独分配内存空间,但是不会为引用分配,引用相当于变量的别名(存疑,只是说可以这样理解),无实体,一旦初始化引用,后续便不可更改所指对象,所有对引用的操作都是对原始数据的操作。
13、c++类所占的内存大小以及成员函数的存储位置
类所占内存的大小是由成员变量(静态成员变量除外)决定的,虚函数指针和虚基类指针也属于数据部分,成员函数是不计算在内的,因为在编译处理后,成员变量和成员函数是分离的。
综上所述,同一个类创建多个对象时,其数据成员是各用各的,互不相通(静态成员变量共享),成员函数是共享的,多个对象共用一份代码。所有类成员函数和非成员函数代码都存放在代码区。无论成员函数的定义在类中还是类外,成员函数都存储在代码区。
14、如果类中存在const或者引用的成员变量,则在编译时默认构造函数被禁止使用。
15、使对象只产生于堆的方法:要对象产生于堆,则只需要使用new(动态分配),而只产生于堆则需要禁止A a(静态分配);所以将析构函数声明为private或者protected即可。
使对象只产生于栈的方法:将operator new 以及 operator delete 声明为私有的。
16、volatile 的使用方法:volatile定义是为了提醒编译器后面所定义的变量随时可能改变,因此每次存储或读取该变量时不对该变量进行优化,直接从内存地址中读取,从而实现对某个地址的稳定访问。
a、中断服务程序中修改的供其他程序检测的变量需加volatile;
b、多任务环境下各任务共享的标志;
c、存储器映射的硬件寄存器(如状态寄存器)
小白学习记录,个人理解,不对之处见谅(55555555~~~~~~~~~~~~~)