Должен ли я использовать спецификатор noException и оператор noException в большинстве функций C++?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Должен ли я использовать спецификатор noException и оператор noException в большинстве функций C++?

Сообщение Anonymous »

Я все еще новичок в языке программирования C++ и пытаюсь изучить что-то новое.
Я реализую очень простые классы iterator/reverse_iterator и другие стандартные библиотечные контейнеры.
Я вижу, что в большинстве реализаций стандартных библиотек, таких как GCC, MS и других, они используют спецификатор noException и оператор noException в большинстве своих функции, чтобы проверить, выбрасывают они или нет.
Это один из примеров:

Код: Выделить всё

_GLIBCXX17_CONSTEXPR
reverse_iterator(const reverse_iterator& __x)
_GLIBCXX_NOEXCEPT_IF(noexcept(_Iterator(__x.current)))
: current(__x.current)
{ }

_GLIBCXX_NODISCARD
_GLIBCXX17_CONSTEXPR iterator_type
base() const
_GLIBCXX_NOEXCEPT_IF(noexcept(_Iterator(current)))
{ return current; }
Но есть части, где они не используются, например:

Код: Выделить всё

template
_GLIBCXX_NODISCARD
inline _GLIBCXX17_CONSTEXPR bool
operator==(const reverse_iterator& __x,
const reverse_iterator& __y)
{ return __x.base() == __y.base(); }
Я знаю, что если функция помечена как noException, компилятор может выполнить некоторые оптимизации, а также знать, что ее нужно использовать только там, где вы знаете функцию (или вызываете для других функций внутри) не может генерировать исключения.
Насколько я понимаю, здесь используется, потому что мы работаем с шаблонами и проверяем, выдает или не выдает тип (пожалуйста, поправьте меня, если я ошибаюсь).
Итак, в каких ситуациях мне нужно проверять отсутствие выдачи с помощью спецификатора noException и оператора noException в функциях?
И, судя по приведенному выше примеру с оператором сравнения, почему они не используют noException?
Могу ли я отметьте эти операторы сравнения как noException или проверьте, являются ли они noException?

Подробнее здесь: https://stackoverflow.com/questions/782 ... tions-in-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему clang несовместим с noException(++it) и noException(*it) для контейнеров?
    Anonymous » » в форуме C++
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Почему clang несовместим с noException(++it) и noException(*it) для контейнеров?
    Anonymous » » в форуме C++
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • `noException(noException(expr))` на лямбда-выражении в MSVC
    Anonymous » » в форуме C++
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Ошибка запуска log4j2. Нераспознанный спецификатор преобразования и спецификатор формата.
    Anonymous » » в форуме JAVA
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Имеет ли смысл определять оператор < как noException?
    Anonymous » » в форуме C++
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»