【问题标题】:what is this syntax mean? operator overloading & throw exception这个语法是什么意思?运算符重载和抛出异常
【发布时间】:2011-06-20 13:20:57
【问题描述】:

在书中看到一段代码:

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

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

【问题讨论】:

  • 我在那本书的几页之后找到了异常规范部分-_-#

标签: c++ throw


【解决方案1】:

这是一个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 限定符不同,异常规范不是函数类型的一部分。

【讨论】:

  • 注意:默认情况下,unexpected() 会导致应用程序因极端偏见而终止。
【解决方案2】:

这是一个exception specification。它告诉编译器该函数只能抛出 RangeError 类型或其子类型的期望。

【讨论】:

    猜你喜欢
    • 2011-01-04
    • 2016-03-07
    • 2013-07-03
    • 1970-01-01
    • 2012-01-19
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多