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

Автор: @energy_it

РКН: https://clck.ru/3QREHc

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
👩‍💻 Работаем со std::map без боли!

В этой шпаргалке — наглядное объяснение того, как устроен доступ и вставка в std::map: когда значения создаются автоматически, когда выбрасывается исключение, как избежать лишних конструирований и как быстро проверить наличие ключа.

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥147🤝6😁1
Проверяем предположения с помощью assert!

Сейчас научимся использовать assert() для быстрого выявления ошибок во время выполнения программы. Это пригодится при отладке и проверке логики.

Подключим нужную библиотеку — она уже есть в стандартной поставке:
#include <cassert>


Вставляем проверку, которая должна быть всегда верной при корректной работе программы:
int x = getValue();
assert(x >= 0); // программа завершится, если x < 0


Если условие внутри assert() ложно, программа остановится и покажет точку сбоя. Это помогает сразу увидеть, где нарушено предположение.

Пример с указателем:
int* ptr = getPointer();
assert(ptr != nullptr); // защита от разыменования нулевого указателя


Возможный результат при запуске (если условие нарушено):
Assertion failed: ptr != nullptr, file main.cpp, line 6


🔥 Таким образом ты можешь на лету проверять важные условия по типу диапазонов или нулевых указателей.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥106🤝2
👍 Большая подборка «вредных советов» с живыми примерами из реального кода!

В этой статье:
• Ироничные «вредные советы» по C++ из реальных проектов
• Разбор, почему советы опасны, с наглядными примерами ошибок
• Краткие выводы, как переписать код безопаснее и понятнее

🔊 Продолжай читать на Habr!


📣 C++ Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
11🔥7👍4
Как не копировать лишнее в циклах?

В варианте for (auto user : users) каждый элемент вектора копируется. Если структура тяжёлая — это лишние аллокации и падение производительности.

Чаще всего достаточно ссылки на уже существующий объект:
for (const auto& user : users) { ... }  // без копий, только чтение


auto& — ссылка без копии, const auto& — ссылка только для чтения.
Когда объект нужно именно «забрать», делаем это явно:
for (auto& user : users) {
process(std::move(user));
}


🔥 Итог: перебирай контейнеры через auto& / const auto&, а перенос делай явным std::move — меньше скрытых копий и понятнее код.

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
16👍12🔥7
Убираем ворнинги красиво — атрибут [[maybe_unused]]

Часто в коде появляются переменные или параметры, которые нужны только в отладке или “на будущее”.

Компилятор тут же ругается: unused variable / unused parameter. Удалять их не всегда удобно, а вот пометить — можно.

С атрибутом [[maybe_unused]] ты прямо говоришь компилятору: «эта штука может не использоваться — это ок».

Например, параметр, который нужен только в отладочной сборке:
void handle_request(int id, int debug_code [[maybe_unused]]) {
#ifdef DEBUG
// В отладке логируем больше деталей
log_debug("debug_code = " + std::to_string(debug_code));
#endif

// основная логика обработки запроса
process(id);
}


Точно так же можно помечать локальные переменные, которые используются только в assert или временно отключены:
void foo() {
int value [[maybe_unused]] = compute_something();

// допустим, пока проверка отключена
// assert(value > 0);

do_work();
}


Атрибут можно навесить и на всю функцию, если она может пока ниоткуда не вызываться:
[[maybe_unused]]
void debug_dump_state() {
// вспомогательная отладочная функция
}


🔥 [[maybe_unused]] помогает держать код аккуратным: ты явно показываешь намерение и убираешь лишние ворнинги без костылей и странных #ifdef вокруг каждой строки.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
16🔥13👍4👎1
📂 Напоминалка по HTTP-кодам ответа!

На картинке — цветная таблица со всеми основными статусами: от успешных 2xx до фатальных 5xx, чтобы быстро вспомнить, что скрывается за 404, 418 или 500, не шарясь по документации.

Сохрани, чтобы всегда под рукой был словарь ответов любого веб-сервиса!

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11🤝94👍2😁1
👩‍💻 Итераторы вместо индексов!

В этой шпаргалке — как обходить контейнеры по итераторам, гибко двигаться по диапазонам и удобно наполнять результаты, не полагаясь на сырые индексы.

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26🤝16👍52😁2
This media is not supported in your browser
VIEW IN TELEGRAM
❤️ Нашел EmptyCrate — сайт про живой modern C++

Блог Джейсона Тёрнера (автора C++ Weekly) с глубокими разбором RAII, шаблонов, многопоточности и best practices, основанными на его многолетнем опыте промышленной разработки и преподавания C++.

📌 Оставляю ссылочку: abseil.io

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1412👍6
😎 Классная статья — практическое введение в умные указатели!

В этой статье:

• Понять, зачем нужны умные указатели и автоматическое управление памятью
• Разобраться в различиях unique_ptr, shared_ptr и weak_ptr на примерах
• Научиться выбирать подходящий умный указатель и избегать типичных ошибок

🔊 Продолжай читать на Habr!


📣 C++ Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍94
Как перестать писать begin()/end() вручную?

Классический цикл выглядит так:
for (auto it = scores.begin(); it != scores.end(); ++it) {
std::cout << *it << '\n';
}


Здесь много «технического шума»: итераторы, begin()/end(), разыменование *it.

Range-based for делает то же самое короче и понятнее:
for (int score : scores) {
std::cout << score << '\n';
}


А если нужно менять элементы, можно сразу работать по ссылке:
for (int& score : scores) {
score += 10;
}


🔥 Итог: используй range-based for вместо явных begin()/end() — меньше шума, меньше поводов ошибиться, код читается как «пройти по всем элементам контейнера».

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝15👍104👎2😁2
This media is not supported in your browser
VIEW IN TELEGRAM
✍️ Держите сайт Quuxplusone — Stuff mostly about C++

Блог Артура О’Дуайера, тренера и участника комитета стандартизации C++, с глубокими разборками современного C++: STL, предложения в стандарт, «тёмные уголки» языка, производительность и нетривиальные баги из реального кода.

📌 Оставляю ссылочку: quuxplusone.io

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥75👍3