cpp / expert
Snippet
Strong Typing via User-Defined Literals
User-defined literals (UDLs) allow developers to attach semantic meaning to numeric or string constants. By returning a custom struct instead of a primitive type, you enforce strong typing, preventing logic errors like adding meters to seconds at compile-time.
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;}
Breakdown
1
constexpr Distance operator"" _km(long double d)
Defines a literal suffix '_km' that processes a long double at compile-time.
2
explicit constexpr Distance(long double m)
The 'explicit' keyword prevents implicit conversion from raw numbers, ensuring safety.