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

what is this syntax mean? operator overloading & throw exception

本文关键字:运算符 重载 抛出异常 意思 语法 是什么      更新时间:2023-10-16

在书中看到一段代码:

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

投掷(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或其子类型的期望。