Извлечение потока в if / else - PullRequest
0 голосов
/ 22 июня 2010

Если предположить, что извлечение потока не завершится неудачей, будет

if( !(stream >> token) )
    throw runtime_error( "Unexpected end of recipe." );
else if( token == "something" )
    // do something
else
    throw runtime_error( "Unknown token" );

Работай так

if( !(stream >> token) )
    throw std::runtime_error( "Unexpected end of recipe." );

if( token == "something" )
    // do something
else
    throw std::runtime_error( "Unknown token" );

(stream = std :: stringstream и token = std :: string) И ожидаемый результат token содержит следующий ... токен ... из потока? Есть ли лучший способ обработки ошибок? Как cerr << "error whatever" << endl; exit(); или что-то, или мой std::runtime_error достаточно хорош?

Ответы [ 2 ]

3 голосов
/ 22 июня 2010

Да, логика точно такая же.

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

1 голос
/ 22 июня 2010

Ваши предположения верны, два фрагмента будут действовать одинаково.

Исключения - это стандартный способ обработки непредвиденных условий в C ++, поэтому я бы не рекомендовал использовать другой способ обработки ошибки, если только в обычных случаях эта ошибка не ожидается. Если это так, я бы предложил вместо вас уведомление о возвращаемом значении для вашей функции.

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