Строка при ошибке выполнения функции - PullRequest
1 голос
/ 09 августа 2011

Вот фрагмент кода, который создает ошибку времени выполнения «Библиотека времени выполнения Microsoft Visual C ++» http://www.flickr.com/photos/66130188@N07/6023459646/

string text = something;
size_t index = text.find("hoopla");
try{
    if(text.at(index-1)<'0'&&text.at(index-1)>'9')
       return false;
}catch(out_of_range){return true;}

Я запускаю его в Qt создателе. Это не вызывает блок захвата. Когда программа, достигшая text.at (index-1) и index-1, выходит за пределы, она создает ошибку времени выполнения в Qt http://www.flickr.com/photos/66130188@N07/6023453724/

У меня не было проблем при использовании MVS2010. Есть предложения?

1 Ответ

1 голос
/ 09 августа 2011

Вы можете полностью избежать проверки исключений, просто проверив возвращаемое значение find first:

if ((index == std::string::npos || index == 0)        ||
    (text[index - 1] < '0' && text[index - 1] > '9')    )
{
  return false;
}

В первом случае, npos, строка поиска не найдена, а во втором случае она находится в самом начале строки окружения, поэтому вы не можете смотреть на символ перед ним.

(Это называется «оскорбительным программированием»: не проверяйте наличие ошибок во время выполнения, но постройте свой алгоритм так, чтобы вы знали , что ваш доступ правильный. Если вы это сделаете, вы можете добавить утверждение assert(index < text.length());, чтобы выразить уверенность в том, что вы придерживаетесь правильного значения, которое не отразится на вашей версии выпуска.)

Обновление: Заменяет .at() на [], поскольку мы уверены в себе.

...