3

在书中看到一段代码:

T& operator[](int i) throw(RangeError)
{
    if(i >= 0 && i < sz) return ptr[i];
    throw RangeError();
}

throw(RangeError) 是什么意思?在函数声明后面,我知道我们可以附加 const 或 =0(对于纯虚拟),但我从未见过 throw(...)

4

2 回答 2

7

这是一个异常规范。这意味着你的函数告诉每个人它可以抛出的东西是有限的。不幸与否,但没有什么能阻止你从函数中实际抛出任何其他东西,但如果在运行时抛出了意外的东西,那么unexpected()将被调用。新的 C++ 标准中删除了异常规范。

void f() throw(); //I promise not to throw anything
void g() throw(A, B, C); // I promise not to throw anything except for A, B, or C

与 const 限定符不同,异常规范不是函数类型的一部分。

于 2011-06-20T13:23:02.887 回答
3

这是一个异常规范。它告诉编译器该函数可能只抛出类型RangeError或其子类型的期望。

于 2011-06-20T13:23:05.770 回答