Вопрос по теории C++ [exceptions]

Модератор: Модераторы разделов

Аватара пользователя
xoomer
Сообщения: 201

Вопрос по теории C++ [exceptions]

Сообщение xoomer »

Здравствуйте. Я запутался. Функция:

Код: Выделить всё

void error (string s)
{
   throw runtime_error(s);
}


Вопрос: runtime_error вызывается только за определением программиста или есть еще заранее предусмотренные варианты вызова?
Far behind the skies...
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Вопрос по теории C++ [exceptions]

Сообщение NickLion »

Простите, не понял, что имелось в виду. std::runtime_error — это класс. В данном случае, создаётся анонимный объект данного класса и его бросают в виде объекта исключения. Т.е. то, что мы наблюдаем — это вызов конструктора класса. Может ли кто-то выбрасывать данное исключение? Да.
Спасибо сказали:
Аватара пользователя
xoomer
Сообщения: 201

Re: Вопрос по теории C++ [exceptions]

Сообщение xoomer »

Смотрите, как объект исключения может быть range_error, он выбрасывается при работе программы в известных случаях. А вот есть случаи когда программист не определяет выброс runtime_error, как в случае с range_error?
...я, наверное, плохо сформулировал вопрос.
Far behind the skies...
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Вопрос по теории C++ [exceptions]

Сообщение NickLion »

Стандартная библиотека может выбрасывать данное исключение, как в чистом виде (например, locale), та и наследованные от данного типа исключения, такие как указанный range_error. Другие библиотеки так же.
Спасибо сказали:
Аватара пользователя
xoomer
Сообщения: 201

Re: Вопрос по теории C++ [exceptions]

Сообщение xoomer »

Мерси!
Far behind the skies...
Спасибо сказали:
Аватара пользователя
xoomer
Сообщения: 201

Re: Вопрос по теории C++ [exceptions]

Сообщение xoomer »

А вот еще вопрос простенький:

Код: Выделить всё

int main() { if (true) std::cout<<'S'; else std::cout<<'F'; }

почему выводит 'S'? Что булевое есть true в данном случае?
Far behind the skies...
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Вопрос по теории C++ [exceptions]

Сообщение NickLion »

Ну, так логично, true — это истина, соответственно, выполняется ветка "то".
Спасибо сказали:
Аватара пользователя
xoomer
Сообщения: 201

Re: Вопрос по теории C++ [exceptions]

Сообщение xoomer »

Так какая сущность в main () имеет истинное значение? :)
Far behind the skies...
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Вопрос по теории C++ [exceptions]

Сообщение NickLion »

true

true — это исходное значение для типа bool, означающее истину. Константа. При преобразовании из bool в int получим 1, это стандарт гарантирует, а как true хранится — это дело компилятора и платформы, обычно 1 и хранят.
Спасибо сказали:
Аватара пользователя
xoomer
Сообщения: 201

Re: Вопрос по теории C++ [exceptions]

Сообщение xoomer »

Ок, тогда вопрос с другой стороны:

Код: Выделить всё

int main() { if (222) std::cout<<'S'; else std::cout<<'F'; }

получается 'S', а

Код: Выделить всё

int main() { if (!222) std::cout<<'S'; else std::cout<<'F'; }

получается 'F'.

"Во всем мне хочется дойти
До самой сути.
В работе, в поисках пути,
В сердечной смуте.

До сущности протекших дней,
До их причины,
До оснований, до корней,
До сердцевины."

Б. Пастернак


Простите, но пока я суть не увидел. :))
Far behind the skies...
Спасибо сказали:
Аватара пользователя
xoomer
Сообщения: 201

Re: Вопрос по теории C++ [exceptions]

Сообщение xoomer »

Если 222 - это сущность, котороя true, то где тогда ищестся сущность не равная 222-м в другом примере?..
Far behind the skies...
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Вопрос по теории C++ [exceptions]

Сообщение NickLion »

В С++ любое число не равное нулю приводится к true, а 0 к false. Или в более Си варианте — всё, что не ноль — истина, ноль — ложь. Оператор ! — логическое отрицание. 222 — не ноль, значит истина, поэтому результатом !222 будет false.
Спасибо сказали:
Аватара пользователя
xoomer
Сообщения: 201

Re: Вопрос по теории C++ [exceptions]

Сообщение xoomer »

Хорошо объяснили, спасибо.
Far behind the skies...
Спасибо сказали: