目录
3.2标准库中的会成长的函数在成长的时候需要将其设置为noexcept以便调用移动构造
1.Type Alias(类型别名)
2.using的用法总结
3.noexcept
3.1简单的看看noexcept的使用
继续往上抛异常都没有处理的话就会调用std::terminate,std::terminate则会调用std::abort,
程序无法执行下去.异常一定要处理,不然就会一直往源头跑,如果都不处理的话跑着跑着程序就要挂掉了.
这种一直往源调用函数跑的过程就是stack unwinding.
When program run, each function(data, registers, program counter, etc) is mapped onto
the stack as it is called. Because the function calls other functions, they too are
mapped onto the stack. This is stack winding.
Unwinding is the removal of the functions from the stack in the reverse order.
每次函数调用发生的时候,都会执行保护现场寄存器、参数压栈、为被调用的函数创建堆栈这几个对堆栈的操
作,它们都使堆栈增长.每次函数返回则是恢复现场,使堆栈减小.我们把函数返回过程中恢复现场的过程称为
unwinding stack.
抛出异常与栈展开(stack unwinding)的延伸阅读
3.2标准库中的会成长的函数在成长的时候需要将其设置为noexcept以便调用移动构造
实际上只有vector会大幅度的痛苦成长,deque的成长是不痛苦的.
问题:不抛异常但是没有成功怎么办呢??
4.override
应用在继承上,父类有个虚函数,子类想要重写,结果写错了函数,就不是override
而是一个新函数了,傻傻的编译器并不知道你想要的干啥.但是子类中如何你在函数后面标明
了override,就告诉编译器你要做的是重写父类的虚函数,这时候编译器就会帮你检查了,
看看是不是写错了.
5.final
用法1:修饰class,告诉编译器,它不可以被继承了;
用法2:修饰虚函数,告诉编译器,这个虚函数不可以被复写(类是否可以被继承不受此处这个final影响).