Russian Qt Forum
Май 04, 2024, 03:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 5 6 [7]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Обработка ошибок без исключений и с помощью исключений  (Прочитано 48841 раз)
8Observer8
Гость
« Ответ #90 : Октябрь 18, 2014, 08:32 »

Qt написан без исключений и без возможности их применения.
Т.е. могут возникнуть десятки и сотни утечек/ошибок в внутренностях Qt.
Не понимаю. Причём тут "Qt написан без исключений"

"без возможности их применения. " Как так? Я же могу применять. Позволяет

Я выбросил исключение из функции и я же его обработал. О чём вы говорите? Вообще не понимаю

Код
C++ (Qt)
void func( int a, int b )
throw( DivideByZero, AnotherError );
 

Код
C++ (Qt)
   try {
       func( 28, 0 );
   } catch ( const LogicError &e ) {
       std::cerr << e.what() << std::endl;
       return 1;
   } catch ( ... ) {
       std::cerr << "Error: unknown expection" << std::endl;
       return 1;
   }
 
Записан
8Observer8
Гость
« Ответ #91 : Октябрь 18, 2014, 10:05 »

У меня ещё такой вопрос. Можно ли считать огромной оплошностью разработчиков Qt, что они разрешили использовать в программах на Qt функции из C++11 для перевода из строки в число? Может надо было вообще запретить ключевые слова try, catch, throw? Или хотя бы выдавать предупреждения?

Вот пример кода на C++11. Здесь я обязан отлавливать исключения, так как получу крэш, если пользователь введёт буквы вместо цифр (в этом случае функция std::stod() выбрасывает исключения std::invalid_argument и std::out_of_range)

Код
C++ (Qt)
#include <string>
#include <stdexcept>
#include <iostream>
 
int main()
{
   try {
       std::cout << "\nEnter a real number:\n> ";
       std::string str;
       std::getline( std::cin, str );
       double n = stod( str );
       std::cout << n << std::endl;
   } catch ( const std::logic_error ) {
       std::cerr << "Error: you wrote the incorrect number." << std::endl;
       return 1;
   } catch ( ... ) {
       std::cerr << "Error: unknown exception" << std::endl;
       return 1;
   }
 
   return 0;
}
 
« Последнее редактирование: Октябрь 18, 2014, 10:14 от 8Observer8 » Записан
Bepec
Гость
« Ответ #92 : Октябрь 18, 2014, 11:12 »

Они рекомендуют не использовать исключения.
Если вы их используете - вы берёте на себя ответственность за поведение программы Улыбающийся

Так то если не мешать Qt классы и исключения, то вполне всё работает и не сбоит.

Вы можете спрыгнуть с 130 этажа, но создатель объекта "человек" не предусматривал такую ситуацию и поведение будет непредсказуемым Веселый

offtop: были случаи выживших при падении с 10к метров. Так что это действительно неопределённое поведение Улыбающийся
« Последнее редактирование: Октябрь 18, 2014, 11:14 от Bepec » Записан
8Observer8
Гость
« Ответ #93 : Октябрь 18, 2014, 11:43 »

Исключения - это большая ответственность, но при этом собственные классы исключений очень облегчают разработку!

Написал небольшую статью: Стратегия обработки ошибок пользователя с помощью собственных классов исключений
Записан
Bepec
Гость
« Ответ #94 : Октябрь 18, 2014, 16:50 »

Вы не написали статью. Вы написали сообщение с ссылками. Почитайте на досуге чем они отличаются Веселый
Записан
Страниц: 1 ... 5 6 [7]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.104 секунд. Запросов: 21.