Vor kurzem in meinem Code habe ich explizit schreiben noexcept(false)
auf Funktionen, die ich weiß Ausnahmen zu werfen, vor allem für Menschen, die den Code lesen. Ich frage mich jedoch, ob dies Auswirkungen auf das Verhalten meines Codes oder auf die Art hat, wie der Compiler ihn interpretiert. Macht es einen Unterschied?Hat das Hinzufügen von `noexcept (false)` einen Vorteil für den Code?
Hinweis: Ich bin mir bewusst, dass Destruktoren implizit noexcept sind und dass Sie noexcept(false)
angeben müssen, um das zu ändern, ich frage mich über andere Funktionen.
Beachten Sie, dass Destruktoren in C++ 11 standardmäßig 'noexcept (true)' sind. Wenn Sie das überschreiben möchten, müssen Sie 'noexcept (false)' hinzufügen. Das ist jedoch fast immer eine schlechte Idee. (Ich wage zu sagen, dass es immer eine schlechte Idee ist; ich helfe nur mit "fast", falls ich nicht phantasievoll genug bin.) Riesige Code-Schwaden, einschließlich der Standardbibliothek, setzen voraus, dass Destruktoren immer erfolgreich sind und es sehr ist Es ist schwierig, den Code fehlerfrei zu verfassen, wenn die Bereinigung fehlschlagen kann. In vielen Situationen ist dies unmöglich (z. B. statische Initialisierung oder mehrere Klassenmitglieder). –
Sie könnten '/ * noexcept (false) * /' verwenden, um zu signalisieren, dass Sie nicht versehentlich vergessen haben, 'noexcept' an die Schnittstelle – TemplateRex
hinzuzufügen. Ich wünschte, es gäbe eine Möglichkeit, eine Funktion so zu markieren, dass sie sogar Compiler wirft kann durch interprocedural Analyse feststellen, dass es unmöglich werfen könnte. – kchoi