C++新关键字及语法
引用
引用是C++加入的新类型,引用是变量的别名,在整体上不会开辟空间,引用的出现让C++更加安全。
引用的底层原理
引用的底层是一个常量指针,可以通过反汇编查看
在底层引用和指针的汇编指令一模一样,就可知引用的底层是指针。
如何证明是常量指针呢?
引用不能像指针一样改变指向
引用使用的注意事项
1.引用必须初始化。
2.引用变量在引用后其的权限不能放大。
3.引用不能改变指向。
4.引用作为返回值传递会有无法预料的错误。
auto
auto声明的变量可以自动识别数据的类型,在类型十分复杂的时候可以使用auto简化,增加代码可读性。
同时要注意,auto不能作为函数的参数类型,返回值类型,且不能开辟数组。
范围for
范围for是一个语法糖,它可以遍历可迭代的数据,以数组举例。
范围for的作用是将可迭代的变量(如上图arr数组),从头开始,将每一个数据赋值给e,直到数组到头,范围for要求可迭代的变量不能是一个指针。
C++结构体新特性
C++结构体完全兼容C语言结构体,同时也为C语言结构体添加了许多新的特性
1.C++结构体内可以写函数了。
2.在定义结构体的时候可以直接使用结构体的名字。
C++结构体几乎和类相同,当然也有不同处。
C++类的特性
C++类中不仅可以定义数据,还可以定义函数,同时有访问权限来确定外部是否能直接访问到类中的成员,默认情况下,类中成员的访问权限为私有。
任何一个类都会存在一个指向自己的指针this,由于使用频繁,所有被C++设为了C++的关键字之一,在类中的所有函数本质都隐式的传递了this指针。
类的初始化是编译器调用类的构造函数,要注意,调用无参的构造函数不能加括号,否则会与函数的声明冲突。
类中定义的函数不占对象的内存空间,函数都在代码段处,同时类在内存中的存储和结构体一样遵循内存对齐。
类中被定义的函数如果行数小,则会被编译器默认为内联函数。
C++类与结构体区别
1.类中的成员访问权限默认为私有,而结构体成员访问权限默认为共有。
2.类和结构体的初始化不同,本质是结构体没有默认的构造函数。
构造函数
构造函数是为了初始化类的函数,构造函数有以下特点
1.构造函数没有返回值。
2.构造函数可以重载。
3.任何类都有一个默认的无参的构造函数。
定义
1.构造函数可以构成重载。
2.只要定义了一个构造函数,系统自带的默认构造函数就不存在了。
3.只要在调用的过程中可以不传递参数的构造函数都是默认无参的构造函数。
调用
1.对于内置类型,调用默认的无参构造函(不对自定义类型进行初始化的构造函数)时不会被初始化,而自定义类型则会调用其自身的默认无参构造函数。
2.为了解决调用默认无参构造函数时内置类型不会初始化的情况,C++11后支持成员变量缺省值。
析构函数
析构函数在变量的声明周期结束之后,清理变量所占用的空间。
1.析构函数无返回值。
2.析构函数不能接收参数,在变量的生命周期结束后自动调用。
3.不写析构函数默认存在一个无参的析构函数,任何析构函数对于内置类型,不做处理,而自定义类型则会调用其自身的析构函数。
调用
系统在变量生命周期结束后自动调用。