使用方法
void foo() noexcept;
声明上面的函数不会抛出异常,如果一个异常没有在函数里面被处理,这个函数就会终止这个程序,抛出std::terminate,之后就会调用std::abort。
而且你也可以用另一种方法去声明这个函数抛出异常的方式
比如下面这个,表示如果x.swap(y)不抛出异常的话,那么整个的都不会抛出异常
void swap(Type& x ,Type& y) noexcept((noexcept x.swap(y)))
{
x.swap(y);
}
为什么会有这样的功能?
因为其实在标准库里面是有一些函数只有在noexcept的情况下才会被调用,这种情况就是比如有一个类型的构造函数和析构函数都不会抛出异常,这样的类放在容器里面之后,比如vector来说,这个容器的话就是在添加新元素的时候会调用move函数,因为需要而被的扩容。但是如果你的构造函数和析构函数不被声明是noexcept的话,就可以使用move函数就可以在搬移元素的时候提升效率。