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