lor*_*non 7 c++ custom-exceptions
我来自Ruby和Java背景,最近开始探索C++.
虽然我通过简单地继承异常类来创建自定义异常的初始尝试失败了,但是我发现在网站上发布了以下示例:
class Exception : public exception
{
public:
Exception(string m="exception!") : msg(m) {}
~Exception() throw() {}
const char* what() const throw() { return msg.c_str(); }
private:
string msg;
};
Run Code Online (Sandbox Code Playgroud)
我对C++语义的理解目前还不是很成熟,我希望能够更好地理解这里发生的事情.
在声明const char* what() const throw()中该部分的作用是const throw()什么,以及它是什么样的编程结构?
另外,throw()析构函数规范的目的和意图是什么~Exception(),为什么我需要有一个析构函数规范,虽然我不需要它特别做某事?不应该destructor继承异常就足够了吗?
jam*_*lin 13
const在方法声明该方法不会改变对象之后.(也有例外,通常它用来表示"不会以外部可见的方式改变对象."
该throw()方法声明之后是异常规范; 它类似于throws E1, E2您在Java中看到的异常规范.但是,在C++中,异常规范在编译时不会被检查,并且通常被认为是无用的(现在它们已被弃用).throw()是唯一有用的形式,这意味着函数声明它不能抛出异常(如果是,它是一个逻辑错误,程序将调用一个意外的异常处理程序,默认终止程序).
析构函数是显式声明的,因为如果没有指定,编译器将生成一个调用基类析构函数的析构函数,编译器生成的析构函数将不使用throw()异常规范(尽管在析构函数中抛出异常绝不是一个好主意) .