capypad
0 Tage Serie
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
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 expression
std::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.