type alias+noexcept+override+final
Type alias类型化名–类似于typedef
(1)typedef void(func)(int,int)说明func是一个函数指针,与下面的using func=void()(int,int)等价,但是using更加的明显,凸显func是一个类型;
(2)右侧也是等效,using value_type=T等价于typedef T value_type;
函数名就是函数指针
using
(1)using namespace std;打开名称空间;或者using std::cout;
(2)using _Base::M_allocate;指定去哪里找;后续就可以只写M_allocate;
(3)第三种就是类型化名,using func=void(*)(int,int);
noexcept 不丢出异常
(1)在函数void foo()后面加上noexcept就是表明,程序员保证这个函数不会出现异常;还可以再加上条件noexcept(true)在符合这个条件下,不会出现异常;是可以加上条件的;
(2)下面框中,表明这个swap保证不丢异常,在x.swap(y)不丢异常的情况下;
(3)出现异常会往调用函数那里寻找处理程序,不然就会一直往回追溯;如果没有找到就会触发std:;terminate()继而触发std:;abort()程序中断;
在Move中必须加上noexcept!!!
(5)因为vector有成长扩容两倍的过程,每次都需要调用复制构造来到新的空间,如果有Move的话,就会执行move操作,会更加效率;
(6)你写出move必须通过noexcept通知vector,vector才会放心调用Move;如果没noexcept,vector就不会调用Move;
override 改写应用在虚函数身上
当没有override时,重写虚函数时,当你写错编译器也不会报错,认为是新的一个虚函数,但是加上override之后,写错就会进行报错;
final关键字
(1)修饰类;给父类写上final就说明自己是继承的最后一级,再有类继承就会报错;
(2)修饰虚函数;就不可以再被子类重写;