C/C++ Ready | Программирование
13.3K subscribers
970 photos
51 videos
425 links
Авторский канал по разработке на C и C++.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

Заявление в РКН: № 6188956972

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
Constexpr-хеширование FNV-1a: делаем switch по строкам!

Нужен быстрый 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) без сравнений символов.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍9🔥4
🔥60😁20👍53
👩‍💻 Разбираемся с fmt — современное форматирование строк!

Позволяет печатать данные понятно, кратко и безопасно — как в Python, но в C++.

Что важно знать:

Проверка формата сразу;

Очень лёгкая сборка;

Быстрее потоков вывода.


Подходит для CLI, логов и UI — в любом проекте станет читаемым и стабильным.

📣 C++ Ready | #библиотека
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍76
Многие об этом не знают и почти не используют!

В C++23 можно выполнять сложные вычисления прямо во время компиляции с помощью ключевого слова consteval.

Пример: функция fib() вычисляет последовательность Фибоначчи ещё до запуска программы:
constexpr auto seq = fib(10);


consteval гарантирует, что функция выполнится только при компиляции,
constexpr сохраняет готовый результат в бинарнике.

Удобно для генерации таблиц, коэффициентов, lookup-массивов и всего, что не нужно пересчитывать при каждом запуске.

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍61
👩‍💻 Быстрое перемещение объектов!

Прокачай код с помощью эффективной передачи ресурсов. Пиши меньше, работай быстрее и забудь про лишние копии — всё под твоим контролем.

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21🤝106👍2
Ленивая подгрузка ресурса через std::future!

Иногда нужно заранее запустить тяжёлую загрузку (текстуру, шрифт, JSON) и продолжить работать, не блокируя поток.

Делается одной строкой:
// запускаем асинхронно, файл подгружается в фоновом потоке
auto pngFuture = std::async(std::launch::async, load_png, "assets/ui/buttons.png");


Когда ресурс действительно понадобится (например, при первом рендере экрана), просто дожидаемся результата:
// ещё не забрали?
if (pngFuture.valid()) {
// блокирует только здесь
auto png = pngFuture.get();
// используем загруженную текстуру
draw(png);
}


🔥 Плюсы: главное окно остаётся отзывчивым, а загрузка происходит «по требованию» — без сложной логики потоков и мьютексов.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍5🔥5
👩‍💻 Почему фигурные скобки спасают код?

Они по умолчанию защищают от незаметных преобразований типов и выбирают очевидный способ создания объектов.

Что важно знать:
Защита от потерь;

Читается одинаково везде;

Выявляет скрытые ошибки.


Ставьте фигурные скобки по умолчанию, а круглые оставьте для редких, явно нужных особых случаев.

📣 C++ Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27🤝10👍31
🤨 Многие об этом не знают и почти не используют!

Вместо nullptr, -1 или "N/A" теперь можно возвращать отсутствие значения безопасно и явно — с помощью std::optional.

Пример: функция find_name() возвращает std::optional<std::string>. Если элемент найден — вернёт строку, если нет — std::nullopt.

🔥 Явно показывает, что результат может отсутствовать и избавляет от неочевидных ошибок и nullptr-проверок,

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥176👍5