что означает этот синтаксис? перегрузка оператора и исключение - PullRequest
3 голосов
/ 20 июня 2011

Увидел кусок кода в книге:

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

что означает бросок (RangeError)? За декларацией функции я знаю, что мы можем добавить const или = 0 (для чисто виртуальных), но я никогда не видел throw (...)

Ответы [ 2 ]

7 голосов
/ 20 июня 2011

Это спецификация исключений .Это означает, что ваша функция сообщает всем, что она имеет ограниченный список вещей, которые она может выдать.К сожалению или нет, но ничто не мешает вам на самом деле выбросить что-либо еще из функции, но если во время выполнения выдается что-то неожиданное, то будет вызван 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, спецификация исключения не является частью типа функции.

3 голосов
/ 20 июня 2011

Это спецификация исключения . Он сообщает компилятору, что функция может генерировать только исключения типа RangeError или их подтипов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...