Constexpr-хеширование FNV-1a: делаем switch по строкам!
Нужен быстрый
Возьмём FNV-1a-хеш, который считается на этапе компиляции:
Теперь можно «переключаться» по строкам так же быстро, как по
🔥 Любые литеральные строки превращаются в константы, а сам
📣  C++ Ready | #практика
Нужен быстрый
switch без std::string_view сравнений? Возьмём FNV-1a-хеш, который считается на этапе компиляции:
// 32-битный constexpr-хеш FNV-1a
constexpr uint32_t fnv1a(char const* s, uint32_t h = 0x811c9dc5) {
return *s ? fnv1a(s + 1, (h ^ uint8_t(*s)) * 0x01000193) : h;
}
#define H(str) fnv1a(str)
Теперь можно «переключаться» по строкам так же быстро, как по
int:void handle(std::string_view cmd) {
    switch (fnv1a(cmd.data())) {
        case H("start"):  /* … */ break;
        case H("stop"):   /* … */ break;
        case H("status"): /* … */ break;
        default:          /* ?   */ break;
    }}🔥 Любые литеральные строки превращаются в константы, а сам
switch — чистый O(1) без сравнений символов.Please open Telegram to view this post
    VIEW IN TELEGRAM
  ❤12👍9🔥4
  Позволяет печатать данные понятно, кратко и безопасно — как в Python, но в C++.
Что важно знать:
• Проверка формата сразу;
• Очень лёгкая сборка;
• Быстрее потоков вывода.
Подходит для CLI, логов и UI — в любом проекте станет читаемым и стабильным.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  Please open Telegram to view this post
    VIEW IN TELEGRAM
  🔥20👍7❤6
  Многие об этом не знают и почти не используют!
В C++23 можно выполнять сложные вычисления прямо во время компиляции с помощью ключевого слова
Пример: функция
•
•
Удобно для генерации таблиц, коэффициентов, lookup-массивов и всего, что не нужно пересчитывать при каждом запуске.
📣  C++ Ready | #совет
В C++23 можно выполнять сложные вычисления прямо во время компиляции с помощью ключевого слова
consteval.Пример: функция
fib() вычисляет последовательность Фибоначчи ещё до запуска программы:constexpr auto seq = fib(10);
•
consteval гарантирует, что функция выполнится только при компиляции,•
constexpr сохраняет готовый результат в бинарнике.Удобно для генерации таблиц, коэффициентов, lookup-массивов и всего, что не нужно пересчитывать при каждом запуске.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🔥11👍6❤1
  Please open Telegram to view this post
    VIEW IN TELEGRAM
  Please open Telegram to view this post
    VIEW IN TELEGRAM
  🔥21🤝10❤6👍2
  Ленивая подгрузка ресурса через std::future!
Иногда нужно заранее запустить тяжёлую загрузку (текстуру, шрифт, JSON) и продолжить работать, не блокируя поток.
Делается одной строкой:
Когда ресурс действительно понадобится (например, при первом рендере экрана), просто дожидаемся результата:
🔥 Плюсы: главное окно остаётся отзывчивым, а загрузка происходит «по требованию» — без сложной логики потоков и мьютексов.
📣  C++ Ready | #практика
Иногда нужно заранее запустить тяжёлую загрузку (текстуру, шрифт, JSON) и продолжить работать, не блокируя поток.
Делается одной строкой:
// запускаем асинхронно, файл подгружается в фоновом потоке
auto pngFuture = std::async(std::launch::async, load_png, "assets/ui/buttons.png");
Когда ресурс действительно понадобится (например, при первом рендере экрана), просто дожидаемся результата:
// ещё не забрали?
if (pngFuture.valid()) {
// блокирует только здесь
auto png = pngFuture.get();
// используем загруженную текстуру
draw(png);
}
🔥 Плюсы: главное окно остаётся отзывчивым, а загрузка происходит «по требованию» — без сложной логики потоков и мьютексов.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  ❤11👍5🔥5
  Они по умолчанию защищают от незаметных преобразований типов и выбирают очевидный способ создания объектов.
Что важно знать:
• Защита от потерь;
• Читается одинаково везде;
• Выявляет скрытые ошибки.
Ставьте фигурные скобки по умолчанию, а круглые оставьте для редких, явно нужных особых случаев.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  Please open Telegram to view this post
    VIEW IN TELEGRAM
  🔥27🤝10👍3❤1
  Вместо
nullptr, -1 или "N/A" теперь можно возвращать отсутствие значения безопасно и явно — с помощью std::optional.Пример: функция
find_name() возвращает std::optional<std::string>. Если элемент найден — вернёт строку, если нет — std::nullopt.🔥 Явно показывает, что результат может отсутствовать и избавляет от неочевидных ошибок и nullptr-проверок,
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🔥17❤6👍5