这个语法是什么意思?运算符重载&抛出异常

时间:2011-06-20 13:20:58

标签: c++ throw

在书中看到了一段代码:

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

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

2 个答案:

答案 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类型或其子类型的预测。