Удаление noexcept из функции C ++, что делать с вызывающими ее функциями noexcept? - PullRequest
1 голос
/ 06 августа 2020

Предположим, у меня есть функция foo, помеченная как noexcept где-то в моем коде. Многие другие функции вызывают foo, и многие из них также помечены как noexcept.

Теперь предположим, что мне нужно настроить foo, и теперь он может генерировать исключение, поэтому это не noexcept больше.

  1. Все функции, которые вызывают foo, должны быть удалены noexcept, это правильно?

  2. Как я полагаю найти все те функции, которые вызывают foo? Есть ли лучший способ, чем обычный поиск в моем текстовом редакторе?

1 Ответ

0 голосов
/ 06 августа 2020
  1. При поиске по spe c кажется, что функции, вызывающие потенциально вызывающие функции, на самом деле могут иметь спецификатор noexcept. Если исключение генерируется foo и оно вызывается другой функцией, которая помечена как noexcept, то исключение вызовет вызов std::terminate. Итак, в зависимости от того, хотите ли вы, чтобы исключение распространялось или нет, вам не нужно удалять все спецификаторы noexcept. Однако, если вы хотите, чтобы исключение распространялось, вам, вероятно, нужно удалить эти noexcept спецификаторы.

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

...