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 branchlog_data(42); // Compiles only the integer branchreturn 0;}
Erklärung
1
if constexpr (std::is_floating_point_v<T>)
Der Compiler wertet dies zur Kompilierzeit aus und verwirft die anderen Zweige.