我已经开始以统一的方式使用C++异常,现在我希望编译器(g ++)检查没有"异常泄漏".该throw装修应该这样做,好像const确实为类方法常量性.
嗯,事实并非如此.
使用throw仍然是纪录片,但如果其他人认为函数不能抛出其文档中列出的其他异常,则甚至可能会产生危险的误导.
可以说g ++以某种方式被说服对其抛出检查更加严格,即真正确保一个函数被装饰为throw()永远不会抛出任何东西.
编辑:发现此问题广泛处理该主题.
C++ expressionThrow在https://en.cppreference.com/w/cpp/language/throw中定义为 a 。从语法上讲,它后面跟着一个异常类名。例如:
int a = 1, b = 0;
if (b==0){
string m ="Divided by zero";
throw MyException(m); //MyException is a class that inherit std::exception class
}
Run Code Online (Sandbox Code Playgroud)
但是,我见过其他一些我不太理解的 throw 语法:
void MyFunction(int i) throw(); // how can we have an expression following a function definition?
Run Code Online (Sandbox Code Playgroud)
或者在自定义异常类中,我们还有:
class MyException : public std::exception
{
public:
MyException( const std::string m)
: m_( m )
{}
virtual ~MyException() throw(){}; // what is throw() in this case?
const char* what() …Run Code Online (Sandbox Code Playgroud)