Wie wird der std :: vector von C ++ 20 constexpr zugewiesen?

Sep 03 2020

Angesichts der Tatsache, dass der aktuelle Inhalt und die Größe eines Vektors zur Laufzeit zufällig bestimmt werden können und alle Inhalte beim Aufruf von assign zerstört werden müssen, wie kann die Zuweisungselementfunktion von C ++ 20 konstexpr sein, d. H. Kompilierungszeit?

Antworten

3 metamorphosis Sep 03 2020 at 11:26

Habe hier meine Antwort gefunden . Zitieren,

Eine constexpr-Funktion zu sein bedeutet nicht, dass die Funktion zur Kompilierungszeit ausgeführt wird. Es heißt, dass die Funktion das Potenzial hat, zur Kompilierungszeit ausgeführt zu werden. Eine constexpr-Funktion kann auch eine Laufzeit ausführen. Es ist oft eine Frage des Compilers und der Optimierungsstufe, ob eine constexpr-Funktion zur Kompilierungszeit oder zur Laufzeit ausgeführt wird.

Ergo kann im Gegensatz zu constexpr-Variablen, die zur Kompilierungszeit bestimmbar sein müssen, ein Aufruf einer bestimmten constexpr-Funktion zur Kompilierungszeit ausgeführt werden, abhängig von den Umständen des Aufrufs (z. B. ein constexpr std :: vector) und ein anderer zur Laufzeit (z. B. a non-constexpr std :: vector).