En noexcept
Schlüsselwort kann auf viele Funktionssignaturen angewendet werden, aber ich bin mir nicht sicher, wann ich es in der Praxis verwenden sollte. Nach dem, was ich bisher gelesen habe, ist die in letzter Minute hinzugefügte noexcept
scheint sich mit einigen wichtigen Problemen zu befassen, die entstehen, wenn Move-Konstruktoren werfen. Ich bin jedoch immer noch nicht in der Lage, zufriedenstellende Antworten auf einige praktische Fragen zu geben, die mich dazu veranlassten, mehr über folgende Themen zu lesen noexcept
an erster Stelle.
-
Es gibt viele Beispiele für Funktionen, von denen ich weiß, dass sie niemals ausgelöst werden, bei denen der Compiler dies aber nicht selbst bestimmen kann. Sollte ich anhängen
noexcept
zur Funktionsdeklaration in alle diese Fälle?Ich muss darüber nachdenken, ob ich die folgenden Zeilen anhängen muss oder nicht
noexcept
nach jede Funktionsdeklaration würde die Produktivität der Programmierer erheblich verringern (und wäre, offen gesagt, ein Ärgernis). In welchen Situationen sollte ich vorsichtiger sein mit der Verwendung vonnoexcept
und in welchen Situationen kann ich mit dem implizitennoexcept(false)
? -
Wann kann ich realistischerweise eine Leistungsverbesserung erwarten, nachdem ich
noexcept
? Nennen Sie insbesondere ein Beispiel für Code, für den ein C++-Compiler besseren Maschinencode erzeugen kann, nachdem er Folgendes hinzugefügt hatnoexcept
.Mir persönlich sind folgende Punkte wichtig
noexcept
wegen der größeren Freiheit, die der Compiler hat, um bestimmte Arten von Optimierungen sicher anzuwenden. Nutzen moderne Compiler die Vorteile vonnoexcept
auf diese Weise? Wenn nicht, kann ich erwarten, dass einige von ihnen dies in naher Zukunft tun werden?