Niedawno w moim kodzie wyraźnie pisałem noexcept(false)
o funkcjach, o których wiem, że wyrzucają wyjątki, głównie dla osób czytających kod. Zastanawiam się jednak, czy ma to wpływ na zachowanie mojego kodu lub sposób, w jaki kompilator je interpretuje. Czy to ma jakieś znaczenie?Czy dodanie `noexcept (false)` w jakikolwiek sposób przynosi korzyść kodowi?
Uwaga: Jestem świadomy, że destruktory nie są domyślnie wyjątkiem i że musisz zmienić noexcept(false)
, zastanawiam się nad innymi funkcjami.
Należy zauważyć, że w C++ 11 destruktory są domyślnie 'noexcept (true)'. Jeśli chcesz to zmienić, musisz dodać 'noexcept (false)'. Jednak prawie zawsze jest to zły pomysł. (Zaryzykowałbym twierdzenie, że to zawsze zły pomysł, ja tylko zabezpieczam się "prawie" na wypadek, gdybym nie był wystarczająco pomysłowy.) Ogromne pokosy kodu, w tym standardowa biblioteka, zakładają, że destruktory zawsze się udają i to jest bardzo trudne do skomponowania kodu w sposób, który można naprawić, jeśli czyszczenie może się nie powieść. W wielu sytuacjach jest to niemożliwe (na przykład statyczna inicjalizacja lub wielu członków klasy). –
możesz użyć '/ * noexcept (false) * /', aby zasygnalizować, że nie zapomniałeś przypadkowo dodać 'noexcept' do interfejsu – TemplateRex
Chciałbym mieć sposób na zaznaczenie funkcji, która może rzucić nawet, jeśli kompilator może ustalić za pomocą analizy interpre- dycyjnej, której nie jest w stanie wyrzucić. – kchoi