Wie der Titel fragt: Kann sichergestellt werden, dass eine constexpr-Funktion höchstens einmal zur Kompilierzeit aufgerufen wird?Kann sichergestellt werden, dass eine constexpr-Funktion höchstens einmal zur Kompilierzeit aufgerufen wird?
Dies wird nicht eindeutig möglich, wenn die Funktion constepxr nicht; Ich könnte eine Funktion schreiben, die immer dann aufgerufen wird, wenn ich die Leertaste drücke, damit der Compiler das zur Kompilierungszeit nie herausfinden kann.
constexpr Ausdrücke/Funktionen haben Nebenwirkungen nicht, spielt es keine Rolle, so nicht, wie oft sie (mit Ausnahme der Laufzeit/Performance) bezeichnet werden. Warum also wollen Sie sicherstellen, dass ein consExpr nur einmal ausgewertet wird? –
@WernerHenze "Warum willst du also sicherstellen, dass ein Constexpr nur einmal ausgewertet wird?" nur Neugierde und die Grenzen einer Sprache zu finden :-) – rwols
@rwols: Das Problem ist, dass "nur einmal aufgerufen" ein sinnloses Konzept für eine "constexpr" -Funktion zur Kompilierzeit ist. Es kann buchstäblich eineinhalb Mal aufgerufen werden (!) - Implementierungen können die Auswertung von constexpr-Ausdrücken zwischenspeichern, und dies kann partielles Caching beinhalten. – MSalters