В современном C++ можно "конструировать" величины с размерностью. То есть, можно создавать такие функции, которые будут обрабатывать выражения с постфиксом, и в компил-тайме преобразовывать их в готовые значения. Звучит сложно, но на деле все гораздо проще.
Вот пример кода:
using ull = unsigned long long;
constexpr ull operator"" _KB(ull value)
{
return value * 1024;
}
constexpr ull operator"" _MB(ull value)
{
return value * (1024_KB);
}
cout << 10_KB << endl;
cout << 500_MB << endl;
Данный код распечатает количество байт в 10 килобайтах и количество байт в 50 мегабайтах.
Такие функции определения оператора "" (две кавычки), которые обычно (но необязательно) написаны с помощью constexpr, и которые для определения своего имени используют постфикс, называются пользовательскими литералами.
Благодаря выражению constexpt можно добиться того, что все вычисления будут выполнены в компилтайме, если величины, используемые в выражениях вместе с такими пользовательскими литералами, известны на этапе компиляции (являются предопределенными константами).
В данном примере итоговый тип выражения пользовательского литерала - это просто unsigned long long.
Говорят, что можно доработать данный код так, чтобы был контроль типов. Например, чтобы нельзя было смешать километры и килобайты без явного преобразования. Не совсем ясно для чего это нужно, ведь в физических формулах часто разные типы величин находятся в одном выражении, главное чтобы итоговый тип формулы соответствовал ожидаемой единице измерений. Одним только контролем типов контроля единиц измерений в общем случае добиться не получится.
То есть, по сути, в вышеприведенном коде нет ничего сверхестественного, это просто удобный преобразователь беззнаковых целочисленных величин, не более того.