Как мне описать метод, который не имеет побочных эффектов, если во время выполнения выдается исключение?

Я просто не могу вспомнить терминологию, используемую для этого и других связанных свойств.

РЕДАКТИРОВАТЬ - Может быть, такой концепции не существует, но я помню, как читал что-то в 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 как "нейтралитет исключений".

Другие вопросы по тегам