Warum müssen wir Funktionen als constexpr kennzeichnen?
C ++ 11 erlaubt Funktionen, die mit dem deklariert wurdenconstexpr
Bezeichner, der in konstanten Ausdrücken wie Vorlagenargumenten verwendet werden soll. Es gibt strenge Anforderungen an das, was sein darfconstexpr
; Im Wesentlichen kapselt eine solche Funktion nur einen Unterausdruck und nichts anderes. (Edit: Dies ist in C ++ 14 entspannt, aber die Frage steht.)
Warum brauchen Sie das Schlüsselwort überhaupt?Was wird gewonnen?
Es hilft, die Absicht einer Schnittstelle aufzudecken, aber esnicht Bestätigen Sie diese Absicht, indem Sie sicherstellen, dass eine Funktion in konstanten Ausdrücken verwendbar ist. Nach dem Schreiben einesconstexpr
Funktion muss ein Programmierer noch:
Entgegen der aufgedeckten Absicht funktioniert das Dekorieren mitconstexpr
kann ein falsches Sicherheitsgefühl hinzufügen, da tangentiale syntaktische Einschränkungen überprüft werden, während die zentrale semantische Einschränkung ignoriert wird.
Zusamenfassend: Würde es unerwünschte Auswirkungen auf die Sprache geben, wennconstexpr
in funktion deklarationen waren nur fakultativ? Oder würde sich das überhaupt auf ein gültiges Programm auswirken?