- C++基本上完全兼容C语言,C语言是C++的一个子集,C++则是C语言的一个超集
- C语言是面向过程的语言,C++则是宏观上面向对象,微观上面向过程的
- C++支持运算符的重载
- C++支持异常机制
- C++支持泛型编程
- C++中申请动态内存可以使用new/new[]
new/delete和malloc/free之间的区别
- new/delete是C++中申请、释放动态内存的关键字,malloc/free是C中申请、释放动态内存的函数
- new/delete会分别调用类的构造和析构函数,malloc/free不会调用类的构造和析构函数
- new申请动态内存只需给出数据类型,不需计算数据类型的字节大小,malloc申请动态内存只需给出申请的动态内存字节大小,new只关心类型,malloc只关心大小
- new申请失败会抛出异常,malloc返回失败则是返回NULL
- new申请成功返回的是特定类型的指针,malloc返回的则是void*类型的指针
- new申请一片连续的内存需要使用new[],malloc直接输入内存的大小即可
- new/new[]分别使用delete/delete[]来释放,malloc/calloc申请的内存一律使用free释放
指针与引用之间的区别
- 指针是实体变量,引用不是实体变量
- 指针可以不初始化,引用必须初始化
- 指针可以为NULL,引用不能为空
- 指针可以更改指向,引用不能更改引用目标
int n, m;
int *p = &n;
p = &m; //这样是可以的
int n, m;
int& p = n;
//&p = m; 不能更改目标 会报错
p = m;//但可以用m进行赋值
- 可以定义指针的指针(双指针),不能定义引用的引用
- 可以定义指针的引用,不能引用的指针
int n = 1024;
int *pn = &n;
int *& rpn = pn; //指针的引用
int& rn = n;
//int& *pr = &rn; 无法定义int&(引用)的指针
- 可以定义数组的引用,不能定义引用的数组
int arr[5] = {1,2,3,4,5};
int (&ra)[5] = arr; //ra引用了arr数组 ra就相当于数组名arr
//int& brr[5]; //引用的数组 错误的 不能声明引用的数组
- 引用的本质还是指针,底层是用指针来实现的