cpp / expert
Snippet
Erzwingung zur Kompilierzeit mit consteval
Das Schlüsselwort 'consteval' (C++20) legt fest, dass eine Funktion eine Kompilierzeit-Konstante erzeugen muss. Im Gegensatz zu 'constexpr', das sowohl Kompilierzeit- als auch Laufzeit-Ausführung erlaubt, verbietet 'consteval' strikt Laufzeit-Aufrufe und garantiert somit Null-Overhead.
snippet.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>consteval int fast_power(int base, int exp) {int res = 1;while (exp > 0) {res *= base;--exp;}return res;}int main() {constexpr int val = fast_power(2, 10); // OK// int dynamic_val = 5;// int error = fast_power(dynamic_val, 2); // Error: not a constant expressionstd::cout << val << "\n";}
Erklärung
1
consteval int fast_power
Definiert eine 'Immediate Function', die nur in Kontexten aufgerufen werden kann, die Konstanten erzeugen.
2
constexpr int val = ...
Das Ergebnis wird während der Kompilierung berechnet und als Literal in die Binärdatei eingebettet.