【发布时间】:2016-12-02 15:19:04
【问题描述】:
我已经尝试了大约 20 次尝试并在过去 2 小时内阅读了大量页面,但无法弄清楚我在这里做错了什么:
#pragma once
#include <exception>
using namespace std;
class EmptyHeap : public exception {
public:
virtual const char* what() const throw()
{
return "The heap is empty!";
}
};
然后在堆类中,一个公共方法:
void remove() throw()//EmptyHeap
{
if (isEmpty())
{
EmptyHeap broken;
throw broken;
}
...
此代码有效,但原始标题是:
void remove() throw EmptyHeap;
有没有办法指定方法在 C++ 中抛出什么异常,或者这只是 Java 的事情?
【问题讨论】:
-
The correct syntax 是
throw(EmptyHeap)(注意括号)。进一步注意,不推荐使用异常规范。放下它。 -
请注意,这很可能根本不是例外。您将如何从
EmptyHeap异常中“恢复”?从空堆中删除某些东西是一个编程错误,因此正确的做法是为isEmpty添加一个前提条件。这意味着您要记录类用户的前提条件并在代码中添加assert(!isEmpty());。 -
另请注意,所有编译器 (*coughVisualStudiocough*) 都不太支持 C++ 异常规范,即使在它被弃用之前也是如此。
标签: c++ throw custom-exceptions