C++11 新特性 noexcept
1 关键词noexcept
noexcept是C++11里的新关键词,比如在leveldb的源码中Status类中有出现。
它的作用是告诉编译器,该函数不会抛出异常,可以引导编译器做更多的优化。
如果在运行时,noexcept函数抛出了异常,程序会直接终止,调用std::terminate函数
2 C++的异常处理
C++中的异常处理是在运行时而不是编译时检测的。为了实现运行时检测,编译器会创建额外的代码,这会带来性能损失。
在实践中,一般会用两种异常抛出方式:
一个函数可能会抛出异常
一个函数不会抛出异常
后面的方式可以用一些关键词标示,这样编译器可以做相应的优化,在以往的C++版本中用throw表示,在C++11中被noexcept代替,不会抛出异常用throw(),可能会抛出异常用throw(...)
3 带条件的noexcept
也可以在noexcept里加入条件,比如下面,表示x.swap(y)不会抛异常
最后更新于