cpp / expert
Snippet
Starke Typisierung durch benutzerdefinierte Literale
Benutzerdefinierte Literale (UDLs) ermöglichen es Entwicklern, numerischen oder String-Konstanten eine semantische Bedeutung zuzuweisen. Durch die Rückgabe eines benutzerdefinierten Structs anstelle eines primitiven Typs erzwingen Sie eine starke Typisierung und verhindern Logikfehler wie das Addieren von Metern zu Sekunden zur Kompilierzeit.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>struct Distance {long double meters;explicit constexpr Distance(long double m) : meters(m) {}};constexpr Distance operator"" _m(long double d) {return Distance(d);}constexpr Distance operator"" _km(long double d) {return Distance(d * 1000.0);}int main() {Distance d1 = 5.0_km;Distance d2 = 500.0_m;// Prevents accidental raw numeric assignmentstd::cout << d1.meters + d2.meters << " meters" << std::endl;return 0;}
Erklärung
1
constexpr Distance operator"" _km(long double d)
Definiert ein Literal-Suffix '_km', das ein long double zur Kompilierzeit verarbeitet.
2
explicit constexpr Distance(long double m)
Das Schlüsselwort 'explicit' verhindert die implizite Konvertierung von Rohzahlen und sorgt für Sicherheit.