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

Автор: @energy_it

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

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
Многие уверены, что при возврате локального объекта из функции обязательно сработает копирование или хотя бы перемещение.

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

Компилятор просто создаёт объект сразу на месте вызова функции — это и есть 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
👩‍💻 Быстрая и гибкая сортировка!

Алгоритмы сортировки из STL позволяют решать широкий спектр задач: от базовой сортировки до поиска топ-N без лишних копий. Управляй порядком, экономь ресурсы и строй оптимальные решения на лету.

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍83🤝2