На работу пришли дискуссии о том, как много заботиться об использовании noexcept. Мы все знаем, что noexcept на самом деле не делает огромную сумму для оптимизатора компилятора, за исключением внешне определенного кода, который компилятор в противном случае может предположить, может бросить, потому что он не может знать его реализацию, поэтому единственное реальное преимущество в производительности для маркировки вещей noexcept для кода, который использует std:: move_if_noexcept < > , который будет предполагаться, будет главным образом контейнерами STL и их алгоритмами.
Таким образом, оценка будет такой: do не использовать noexcept, если:
-
extern-функции и классы, где реализация вызываемого не известна компилятору.
-
Переместите конструкторы, переместите операторы присваивания и замените их на любой тип, который может содержаться в контейнере STL.
-
В противном случае не беспокойтесь об этом.
Является ли это справедливой оценкой? Существуют ли другие места в STL, которые генерируют гораздо более оптимальный код, если что-то не так? Если да, то какая реализация STL - это то, что нужно отметить, за исключением того, что она работает, и какие результаты эффективности производительности (меньшее количество распределений памяти, более низкая сложность)?
Изменить: Made CashCow предложил изменить формулировку.