Обработка исключений всей функции в C++ - действительно ли это - плохой стиль?

xargs bash -c 'nohup  google-chrome --no-sandbox $@ &' null  < tabs.txt

С таким файлом тестов:

$ cat tabs.txt                                         
https://stackoverflow.com
unix.stackexchange.com

Method2 :

, если ваш браузер chrome, а ваш скрипт openurl -

[ 112]

Запустите его как

./openurl "https://stackoverflow.com"

Примечание. Замените хром браузером

Method3

xdg-settings set default-web-browser chromium-browser.desktop

или

xdg-settings set default-web-browser chromium-browser.desktop

затем

xdg-open https://stackoverflow.com
6
задан inazaruk 6 March 2009 в 23:18
поделиться

4 ответа

Действительно единственная причина для блоков попытки функционального уровня для конструкторов, иначе это - несколько неясная функция, которая не покупает Вас так очень. Столь же легко сделать это этот путь:

bool readEntity(...)
{
   try
   {
      while(...)
      { 
         if(...)
         {
            //lot's of code...
         }
      }
   }
   catch(XMLBaseException & ex)
   {
       //create our exception and throw
   }
}

Если Вы испытываете затруднения из-за горизонтальной прокрутки, затем нужно должен разделить Ваш код. попытка/выгоды является сложностью, и это должно быть представлено на уровне вложенности, не скрытом.

В конструкторах это - другой вопрос: нет никакого другого способа поймать исключения в списке инициализатора:

SomeClass::SomeClass(parameter p1, parameter p2) : Member1(p1), Member2(p2)
try
{ 
}
catch(Exception &ex)
{
    // handle and rethrow
}

Конечно, если у Вас есть исключение середина конструкции, там маловероятно очень, можно сделать для восстановления кроме журнала и и перебросок (это собирается быть повторно брошенным так или иначе в случае конструктора). Ваш объект еще не полностью создается и нет ничего, что можно действительно сделать с ним. Единственной вещью, которой можно доверять, чтобы быть допустимыми, являются параметры (хотя, если инициализация перестала работать, который, вероятно, произойдет из-за плохих параметров).

Посмотрите этот GOTW для обсуждения этого.

12
ответ дан 8 December 2019 в 13:49
поделиться

Только быть ясным: перебросок и переупаковочные исключения не являются плохой практикой, это - Хорошая Вещь, так как это минимизирует воздействие внешних зависимостей.

Однако выгода попытки функционального уровня предназначается для инициализации конструктора. Оставление нескольких горизонтальных свободных мест в Вашем коде не стоит использовать относительно неясную функцию языка для. Лучше для рефакторинга вложенного кода, если Вы действительно располагаете это с отступом далеко!

4
ответ дан 8 December 2019 в 13:49
поделиться

Та функция, как предполагается, возвращает bool, таким образом, можно возвратить TRUE или FALSE, но если бы функция должна была перестать работать, и bool использовался для чего-то другого, чем флаг успеха (который является плохой практикой, если не чистый c), то это должно бросить для передачи сигналов о вызывающей стороне, это не работало.

0
ответ дан 8 December 2019 в 13:49
поделиться

Существует хорошая дискуссия об общей бесполезности блоков попытки конструктора/функции в Herb Sutters сайт GotW.

1
ответ дан 8 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: