нет, кроме спецификатора и оптимизации компилятора

Я прочитал неясные вещи, касающиеся спецификатора noexcept и оптимизации компилятора. При указании noexcept компилятор может оптимизировать:

  • Время компиляции (более быстрая компиляция).
  • Время выполнения (код работает быстрее).
  • Или оба?
  • Или нет?

3

Решение

Первоначальная причина noexpect состояла в том, чтобы позволить библиотекам использовать более быстрые конструкторы перемещения внутри, если вызывающей функции не разрешено генерировать по спецификации.

Далее, большая оптимизация производительности может быть достигнута в контейнерах, таких как вектор STL, когда конструктор перемещения вашего типа и назначение перемещения снабжены комментариями noexcept. Когда утилита STL std :: move_if_noexcept обнаруживает, что ваши ходы не генерируют, она будет использовать эти безопасные ходы, а не копии для некоторых операций (например, изменения размера). Это, в случае контейнеров, хранящих миллионы элементов, обеспечит огромную оптимизацию.

(цитата из с использованием-noexcept)


Кроме того, компилятору не нужно генерировать дополнительный код для разматывания стека, если он знает, что никакие исключения не могут быть выданы из-за спецификатора noexpect.


Я не вижу, как на время компиляции существенно влияют noexcept-speciers. В результате время выполнения может быть намного быстрее, хотя.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]