Как мне описать метод, который не имеет побочных эффектов, если во время выполнения выдается исключение?
Я просто не могу вспомнить терминологию, используемую для этого и других связанных свойств.
РЕДАКТИРОВАТЬ - Может быть, такой концепции не существует, но я помню, как читал что-то в Effective C++ (или More Effective C++), где он выступал за использование свопов для фиксации изменений в функции последней, потому что функции векторной подкачки гарантированно не генерировали исключение.
3 ответа
Я думаю, что вы хотите сказать, что функция "безопасна для исключения". Смотрите, например, http://en.wikipedia.org/wiki/Exception_safety.
Статья Википедии далее делит безопасность на различные уровни. Это тот, который уместен здесь:
2. Зафиксируйте или откатите семантику, также известную как строгая безопасность исключений или гарантия отсутствия изменений: операции могут завершиться неудачей, но неудачные операции гарантированно не будут иметь побочных эффектов, поэтому все данные сохраняют исходные значения.
Существует ссылка на проектный документ STL, в котором представлена семантика безопасности исключений и фиксации или отката: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.asc
Вы можете подумать о гарантии исключения, в частности о "сильной гарантии".
Прочитав ваше редактирование, я подозреваю, что ваш заголовок немного неправильный. Вы действительно имеете в виду, что у него нет побочных эффектов, независимо от того, выбрасывается ли исключение (в соответствии с текущей формулировкой) или что у него нет побочных эффектов, когда выбрасывается исключение, но если метод завершается без выброса исключения, он будет / может есть побочные эффекты? Там довольно большая разница:)
Последний описан в Accelerated C# 2008 как "нейтралитет исключений".