在书中看到一段代码:
T& operator[](int i) throw(RangeError)
{
if(i >= 0 && i < sz) return ptr[i];
throw RangeError();
}
throw(RangeError) 是什么意思?在函数声明后面,我知道我们可以附加 const 或 =0(对于纯虚拟),但我从未见过 throw(...)
这是一个异常规范。这意味着你的函数告诉每个人它可以抛出的东西是有限的。不幸与否,但没有什么能阻止你从函数中实际抛出任何其他东西,但如果在运行时抛出了意外的东西,那么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 限定符不同,异常规范不是函数类型的一部分。
这是一个异常规范。它告诉编译器该函数可能只抛出类型RangeError
或其子类型的期望。