Kiedy naprawdę powinienem używać noexcept?

Thenoexcept słowo kluczowe może być odpowiednio zastosowane do wielu podpisów funkcji, ale nie jestem pewien, kiedy powinienem rozważyć użycie go w praktyce. Na podstawie tego, co przeczytałem do tej pory, dodanie ostatniej chwilinoexcept zdaje się zajmować niektórymi ważnymi kwestiami, które pojawiają się podczas przenoszenia konstruktorów. Nadal jednak nie jestem w stanie dostarczyć zadowalających odpowiedzi na niektóre praktyczne pytania, które skłoniły mnie do przeczytania więcej na ten tematnoexcept na pierwszym miejscu.

Istnieje wiele przykładów funkcji, które wiem, że nigdy nie będą rzucane, ale dla których kompilator nie może sam ich określić. Powinienem dołączyćnoexcept do deklaracji funkcji wwszystkie takie przypadki?

Musimy myśleć o tym, czy muszę dołączyćnoexcept pokażdy deklaracja funkcji znacznie zmniejszyłaby wydajność programisty (i szczerze mówiąc, byłaby to bolesność w dupie). W jakich sytuacjach powinienem być bardziej ostrożny w używaniunoexcepti dla jakich sytuacji mogę uciec implikowanymnoexcept(false)?

Kiedy mogę realistycznie oczekiwać poprawy wydajności po użyciunoexcept? W szczególności podaj przykład kodu, dla którego kompilator C ++ jest w stanie wygenerować lepszy kod maszynowy po dodaniunoexcept.

Osobiście zależy mi nanoexcept z powodu zwiększonej swobody zapewnianej kompilatorowi w celu bezpiecznego stosowania pewnych rodzajów optymalizacji. Czy wykorzystują to nowoczesne kompilatorynoexcept w ten sposób? Jeśli nie, czy mogę oczekiwać, że niektórzy z nich zrobią to w najbliższej przyszłości?

questionAnswers(8)

yourAnswerToTheQuestion