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

Автор: @energy_it

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

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
👩‍💻 Быстрое перемещение объектов!

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

📣 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
Многие уверены, что при возврате локального объекта из функции обязательно сработает копирование или хотя бы перемещение.

Но это не так. Правильный ответ: ничего не копируется и не мувится вовсе.

Компилятор просто создаёт объект сразу на месте вызова функции — это и есть Named Return Value Optimization (NRVO).

Разберёмся на примере:
#include <iostream>

struct Probe {
Probe() { std::cout << "default\n"; }
Probe(int) { std::cout << "ctor\n"; }
Probe(const Probe&) { std::cout << "copy\n"; }
Probe(Probe&&) noexcept { std::cout << "move\n"; }
};

Probe makeProbe(int x)
{
Probe p{x};
return p; // ← здесь сработает NRVO
}

int main()
{
auto obj = makeProbe(42);
}


Многие ждут хотя бы move, но результат:
ctor


Ни копии, ни мува.
Объект p создаётся сразу в месте obj — без промежуточных конструкторов.

Теперь внесём "улучшение", которое сломает оптимизацию:
Probe makeMoved(int x)
{
Probe p{x};
return std::move(p); // кажется, мы помогаем...
}


Результат:
ctor
move


Добавив std::move, мы запретили NRVO и заставили компилятор действительно переместить объект.

🔥 Не вставляйте std::move, если возвращаете локальный объект по имени.
Дайте компилятору сделать работу за вас.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍6🔥3
😁50👍11🔥75
👩‍💻 Быстрый путь через две очереди!

Двунаправленный BFS ускоряет поиск, запуская его одновременно с начала и конца.

Что важно знать:
Две независимые очереди;

Встреча даёт ответ;

Меньше просмотренных вершин.


Простой и мощный приём, особенно полезный в больших и широких графах.

📣 C++ Ready | #алгоритмы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍43
🤨 Как писать чище и быстрее с ranges & views?

С C++20 можно обрабатывать контейнеры лениво и декларативно с помощью ranges & views — без копирования, временных векторов и вложенных циклов.

Пример: vec | std::views::filter(...) | std::views::transform(...)

Фильтруем, преобразуем и итерируем — без аллокаций и промежуточных шагов.

🔥 Упрощает код, экономит ресурсы и повышает читаемость — особенно в цепочках обработки данных.

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍86🔥3
👩‍💻 Временные ссылки с автосбросом!

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

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

Генерирует короткие коды;

Поднимает HTTP-сервер;

Удаляет просроченные записи.


Полезно для внутренних сервисов, приватных файлов или одноразовых переходов по ссылке.

📣 C++ Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥5👍4