0 Tage Serie
cpp / intermediate
Snippet

Logik-Verzweigungen zur Kompilierzeit

Die 'if constexpr'-Anweisung ermöglicht bedingte Kompilierung. Zweige, die die Bedingung nicht erfüllen, werden vom Compiler nicht instanziiert. Dies ist äußerst nützlich für die Template-Metaprogrammierung, um Kompilierfehler in Zweigen zu vermeiden, die für bestimmte Typen keinen Sinn ergeben würden.

snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <type_traits>
template <typename T>
void log_data(T value) {
if constexpr (std::is_floating_point_v<T>) {
std::cout << "Handling float: " << value << "\n";
} else if constexpr (std::is_integral_v<T>) {
std::cout << "Handling integer: " << value << "\n";
} else {
std::cout << "Handling generic type\n";
}
}
int main() {
log_data(3.14); // Compiles only the float branch
log_data(42); // Compiles only the integer branch
return 0;
}
Erklärung
1
if constexpr (std::is_floating_point_v<T>)
Der Compiler wertet dies zur Kompilierzeit aus und verwirft die anderen Zweige.