我已经开始以统一的方式使用C++异常,现在我希望编译器(g ++)检查没有"异常泄漏".该throw装修应该这样做,好像const确实为类方法常量性.
嗯,事实并非如此.
使用throw仍然是纪录片,但如果其他人认为函数不能抛出其文档中列出的其他异常,则甚至可能会产生危险的误导.
可以说g ++以某种方式被说服对其抛出检查更加严格,即真正确保一个函数被装饰为throw()永远不会抛出任何东西.
编辑:发现此问题广泛处理该主题.
class myexception: public exception
{
virtual const char* what() const throw()
{
return "My exception happened";
}
};
Run Code Online (Sandbox Code Playgroud)
对不起,这个问题可能听起来很愚蠢,但我在解析标题时遇到了问题.有人能用英语描述标题的实际含义吗?对我来说,首先看起来很奇怪的是关键字virtual.该myexception班是不是一个基类,从已经实施的继承exception类,所以为什么还要用virtual在这里?我猜const是返回类型是一个c风格的字符串是const,另一个const是确保这个对象不能被修改(有人可以告诉我该对象可能是什么?).我不知道究竟throw()是什么,从未见过这种语法.
我是c ++的初学者,因此为这个愚蠢的问题道歉.我在这里发帖是因为我在stackoverflow上找不到类似的答案.
我正在逐步完成C++中的异常,而且我正在尝试使用自定义异常,我有这个代码
class MyException: public std::exception{
public:
virtual const char* what() const throw() {
return "something bad happened";
}
};
// class that throws above exception
class canGoWrong {
public:
canGoWrong(){
throw MyException();
}
};
Run Code Online (Sandbox Code Playgroud)
上面的代码由老师展示.构造函数刚刚实现了基类中定义的虚函数exception.我到那儿.
现在,当我尝试使用不同版本进行练习时,我尝试使用自定义函数而不是重新定义虚拟(因为c ++没有严格执行接口的概念,如果我在这里错了,请纠正我.)
我把它写成了
class my_custom_shit_exception: public std::exception {
public:
const char* show() { // I omitted the const throw() here
return "This is an error encountered\n";
}
};
class myclass {
public:
myclass() {
throw my_custom_shit_exception();
}
};
Run Code Online (Sandbox Code Playgroud)
总而言之,我没有发现两种方式的行为差异
public:
const …Run Code Online (Sandbox Code Playgroud)