Specyfikacja kompilacji bez rzutu dla funkcji wstawionej, która zwraca tylko zmienną składową i nie mogłaby generować wyjątków, może być wykorzystywana przez niektóre kompilatory do robienia pesymizacji (złożone słowo przeciwne do optymalizacji), które mogą mieć szkodliwy wpływ na wydajność. Jest to opisane w literaturze Boost: specyfikacja wyjątków
W przypadku niektórych kompilatorów specyfikacja „bez rzucania” na funkcje nieliniowe może być korzystna, jeśli dokonane zostaną odpowiednie optymalizacje, a użycie tej funkcji wpływa na wydajność w sposób, który to uzasadnia.
Dla mnie brzmi to, czy użyć go, czy nie, to połączenie wykonane przez bardzo krytyczne oko w ramach optymalizacji wydajności, być może przy użyciu narzędzi do profilowania.
Cytat z powyższego linku dla tych, którym się spieszy (zawiera przykład złych niezamierzonych efektów określenia rzutu na funkcję wbudowaną z naiwnego kompilatora):
Uzasadnienie specyfikacji wyjątku
Specyfikacje wyjątków [ISO 15.4] są czasami kodowane, aby wskazać, jakie wyjątki mogą zostać zgłoszone lub ponieważ programista ma nadzieję, że poprawią one wydajność. Ale rozważ następujący element z inteligentnego wskaźnika:
T & operator * () const throw () {return * ptr; }
Ta funkcja nie wywołuje żadnych innych funkcji; manipuluje tylko podstawowymi typami danych, takimi jak wskaźniki. Dlatego nigdy nie można wywoływać zachowania środowiska wykonawczego specyfikacji wyjątku. Funkcja jest całkowicie dostępna dla kompilatora; w rzeczywistości jest zadeklarowany jako wbudowany Dlatego inteligentny kompilator może łatwo wywnioskować, że funkcje nie są w stanie zgłaszać wyjątków, i dokonać tych samych optymalizacji, które dokonałby na podstawie pustej specyfikacji wyjątków. „Głupi” kompilator może jednak powodować wszelkiego rodzaju pesymizacje.
Na przykład niektóre kompilatory wyłączają wstawianie, jeśli istnieje specyfikacja wyjątku. Niektóre kompilatory dodają bloki try / catch. Takie pesymalizacje mogą być katastrofą wydajności, która sprawia, że kod nie nadaje się do użytku w praktycznych zastosowaniach.
Choć początkowo atrakcyjne, specyfikacja wyjątku ma zwykle konsekwencje, które należy bardzo dokładnie przemyśleć. Największym problemem związanym ze specyfikacjami wyjątków jest to, że programiści używają ich tak, jakby wywoływały efekt, który chciałby programiści, zamiast efektu, który faktycznie mają.
Funkcja nielinearna to miejsce, w którym specyfikacja wyjątku „nic nie rzuca” może mieć pewne zalety w przypadku niektórych kompilatorów.