Как описать метод, который не имеет побочных эффектов, если во время выполнения выдается исключение? - PullRequest
2 голосов
/ 12 ноября 2008

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

РЕДАКТИРОВАТЬ - Может быть, такой концепции не существует, но я помню, что читал что-то в Effective C ++ (или More Effective C ++), где он рекомендовал использовать свопы для фиксации изменений в функции последней, потому что функции векторной подкачки гарантированно не бросали исключение.

Ответы [ 3 ]

2 голосов
/ 12 ноября 2008

Возможно, вы думаете о исключительной гарантии , в частности о "сильной гарантии".

2 голосов
/ 12 ноября 2008

Я думаю, что вы хотите сказать, что функция "безопасна для исключения". Смотрите, например http://en.wikipedia.org/wiki/Exception_safety.

Статья Википедии далее делит безопасность на различные уровни. Это тот, который уместен здесь:

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

Существует ссылка на проектный документ STL, который вводит семантику безопасности исключений и фиксации или отката: http://www.open -std.org / jtc1 / sc22 / wg21 / docs / paper / 1997 / N1077.asc

1 голос
/ 12 ноября 2008

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

Последний описан в Accelerated C # 2008 как «нейтралитет исключений».

...