1.数据类型
C++新增了bool类型。
2.const与指针类型
const使用对比1,修饰 指针/常量 对比:
//1和2等价
const int *p = NULL;// p是指针,const对指针进行修饰,将限制通过指针修改p指向的数据;故不能通过此指针修改其指向的数据的值。
int const *p = NULL;
int * const p = NULL;// p是常量,然后int *将常量修饰为指针,则整体为指针常量;故不能修改指向。
const使用对比2:
// 完全等价
const int * const p = NULL;
int const * const p = NULL;
// 示例1
const int x = 3;
const int * const p = &x;// int * const p是常量指针,指向const int这个整型常量
p = &y;// 错误
*p = 4;// 错误
x = 5;// 错误
// 示例2
int x = 3;// 这里不用const修饰
const int * const p = &x;
p = &y;// 错误
*p = 4;// 错误
x = 5;// 正确
// 引用也是一样的情况,如果x不用const修饰,则直接通过x修改是可以的。
在声明变量和其指针时,const的使用:
// 错误1,无法通过编译
const int x = 3;
int *y = &x;
// 正确1
int x = 3;
const int *y = &x;
// 正确2
const int x = 3;
const int *y = &x;
我们也可以用权限范围对此进行理解:
在const使用对比1,对比2 的代码注释中有写对const和*修饰的作用,。
我们先看上方正确1 的代码,我们可以直接使用x进行写、读操作(修改/获取数据),但是y因为有const修饰,所以只能通过y进行读操作(获取数据)。显然,x的权限范围 大于 y的权限范围,所以这里可以将&x赋给y。
再来看正确2 ,x只能进行读操作,y也只能进行读操作,x的权限范围 等于 y的权限范围,所以这里也是正确的。
最后看错误1 的代码,x只能进行读操作,但y能进行读、写操作。x的权限范围 小于 y的权限范围,所以&x是无法赋给y的,故这种写法一定是错误的。
3.const与引用(&)
int x = 3;
const int &y = x;// y为x,const修饰引用,将限制通过引用修改其指向的数据;故不能通过y修改它指向的数据的值。
x = 10;// 正确
y = 20;// 错误
4.函数参数默认值
函数的参数列表:
// 正确
void fun(int i, int j = 5, int k = 10);
// 错误,k没有默认值,不应该放在最右边
void fun(int i, int j = 5, int k);
注意:有默认参数值的参数,必须在参数表的最右端。
声明和定义:
// 声明
void fun(int i, int j = 5,int k = 10);
// 定义
void fun(int i, int j, int k){
cout << i << j << k;
}
注意:在声明中写默认值即可,如果写在定义中,有的编译器可能会无法通过。
5.函数重载
在相同作用域内,用同一个函数名定义的多个函数,参数个数和参数类型不同。
6.内联函数-inline
效率高,适合频繁调用的函数,不过有条件。
要求逻辑简单(不能有for等循环体)、不能是递归函数。
对编译器来说inline
是建议性的,是否编译成内联函数还是由编译器根据情况决定的。
故,内联可以说只是一种编译的方式。
7.内存管理
和C语言对比:
// C
void *malloc(size_t size);
void free(void *memblock);
// C++
int *p = new int;
delete p;
注:new、delete是运算符。
块内存操作:
int *arr = new int[10];
delect []arr;
[重要]内存分配有失败的风险,所以需要验证:
int *p = new int[1000];
if(NULL == p){
// 内存分配失败
}
[重要]内存释放完毕,也需要将指针指向NULL,绝对不要留下野指针:
// 1.内存申请和释放
int *p = new int;
if(NULL == p){
// 内存分配失败
// 异常处理
}
delete p;
p = NULL;// 务必这样做!
// 2.块内存申请和释放
int *p = new int[1000];
if(NULL == p){
// 内存分配失败
// 异常处理
}
delete []p;
p = NULL;// 务必这样做!
获取数组元素个数:
// C++中没有现成的获取数组元素个数的方法,只有自己写。
int count = sizeof(array) / sizeof(array[0]);
本篇为视频教程笔记,视频如下: