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

Автор: @energy_it

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

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
👩‍💻 Строки без копий и лишних аллокаций!

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

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥216👍6🤝3
This media is not supported in your browser
VIEW IN TELEGRAM
✍️ Hyperpolyglot — сравнение языков в удобных таблицах!

Хочешь быстро понять, чем Python отличается от C++, Rust или JavaScript. Здесь синтаксис, структура, идиомы и концепции разных языков сравниваются в таблицах, так что можно буквально увидеть, как одна и та же задача решается на разных языках. Это отличный способ прокачать мультиязычное мышление, выбрать язык под задачу или просто пронаблюдать сходства и различия.

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

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
17👍12🔥4🤝2
Почему -1 > 2U может оказаться true?

Это один из самых коварных C++-сюрпризов: когда сравниваешь signed и unsigned, включаются “usual arithmetic conversions”. В итоге int может быть неявно приведён к unsigned, и отрицательное число превращается в огромное положительное.

То есть вот это сравнение может дать неожиданный результат:
int x = -1;
std::size_t y = 2;

x > y;


Потому что x неявно становится чем-то вроде “максимально большого size_t”.

Начиная с C++20 есть безопасные функции сравнения, которые корректно работают для любых signed/unsigned:
std::cmp_less(x, y);
std::cmp_greater(x, y);


Их удобно использовать в типичном кейсе с индексами/размерами контейнеров:
if (std::cmp_less(i, v.size())) {
// i гарантированно < size без ловушек signed/unsigned
}


🔥 Либо держи одинаковые типы у величин, которые сравниваешь (размеры/индексы), либо используй std::cmp_less/std::cmp_greater

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍219👎4🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
😎 TutorialsPoint — это большая библиотека бесплатных учебников и шпаргалок по программированию!

На сайте есть структурированные туториалы с примерами, а ещё — раздел Practice с тысячами задач по кодингу и интерактивные инструменты вроде онлайн-песочниц/компиляторов для практики прямо в браузере.

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

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍6🔥4
std::filesystem::u8path устарел в C++20: что писать вместо него?

Причина простая: появился char8_t, и UTF-8 теперь можно передавать в std::filesystem::path напрямую.

Старый код начинает ругаться на deprecated:
namespace fs = std::filesystem;

fs::path p = fs::u8path(u8"C:\\data\\logs\\today.txt");


В новом коде просто конструируй path из UTF-8:
namespace fs = std::filesystem;

fs::path p1 = fs::path(u8"C:\\data\\logs\\today.txt");

std::u8string s = u8"C:\\data\\logs\\today.txt";
fs::path p2 = fs::path(s);


Если путь приходит как UTF-8 в std::string (конфиг/CLI/JSON), сначала переложи байты в std::u8string, а потом сделай path:
namespace fs = std::filesystem;

fs::path from_utf8(std::string_view s) {
std::u8string u8;
u8.reserve(s.size());
for (unsigned char ch : s) u8.push_back(static_cast<char8_t>(ch));
return fs::path(u8);
}


🔥 u8path больше не нужен. Для u8"..." и std::u8string используй fs::path(...), а для UTF-8 в std::string — один раз переводи байты в std::u8string.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥65😁1
👀 Хотели бы запускать C++ “по ячейкам” прямо в Jupyter?

Идея: пишете кусок C++ в ячейке → жмёте Run → сразу видите вывод/ошибки компиляции → добавляете следующую ячейку и продолжаете.

Зачем это нужно:

быстрые эксперименты (алгоритмы, шаблоны, API)
прототипирование без проекта/сборки
моментальная обратная связь по ошибкам


Это не замена нормальной разработки (CMake, тесты, профилирование), а удобный режим для малых задач и объяснений.

Посмотреть
доклад + видео

📣 C++ Ready | #новость
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥125🤝4👍1
Почему “в Debug работает, а в Release падает”?

Потому что ты берёшь c_str() у временной строки:
const char* p = std::string("neo").c_str();


Временный std::string("neo") уничтожается в конце выражения — и p сразу становится висячим указателем.

В Debug память часто “ещё не затёрли”, а в Release оптимизации/раскладка меняются, и после:
std::string s = "morpheus";


p начинает указывать в мусор (или падает).

Правильно — держать строку живой:
std::string tmp = "neo";
const char* p = tmp.c_str();


🔥 Паттерн something().c_str() почти всегда = “Debug ок / Release боль”. Сохраняй объект в переменную или меняй интерфейс (например, на std::string_view).

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2510🔥6
👩‍💻 Контейнеры без скрытых UB!

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

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2113👍6🤝2
📂 Шпаргалка по компонентам Docker!

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

На картинке показано, из чего состоит Docker и как эти части взаимодействуют между собой. Удобная схема для понимания базы и быстрого повторения.

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍74
Sanitizers в C++: что включить, чтобы не ловить баги в проде

Если команда редко запускает sanitizers, то ошибки памяти и UB почти всегда доезжают до релиза. Поэтому их лучше включить как обычную часть разработки.

ASan хорошо ловит выходы за границы, use-after-free и double free. UBSan показывает разные виды undefined behavior, а TSan находит гонки и проблемы синхронизации.

Для ежедневной сборки обычно хватает такого набора:
-fsanitize=address,undefined -fno-omit-frame-pointer -g -O1


Для многопоточного кода лучше запускать отдельный прогон:
-fsanitize=thread -g -O1


Пример, который ASan поймает сразу:
std::vector<int> v{1, 2, 3};
int x = v[5];


Без sanitizer такой баг может долго жить незаметно, но с sanitizer вы получаете падение в точке ошибки.

🔥 Удобная схема: локально вы работаете с ASan + UBSan, в PR вы гоняете те же проверки, а TSan выносите в отдельный CI-job.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
23👍8🔥4
Почему new int и make_unique<int>() ведут себя по-разному?

Это одна из самых коварных “мелочей”: для фундаментальных типов new int не инициализирует значение, ты получаешь мусор (а чтение такого значения — уже UB).

Вот эта строка создаёт int с неопределённым содержимым:
new int


А вот это — value-initialization, и int станет 0:
new int()


std::make_unique<int>() как раз создаёт объект с value-initialization, поэтому *p2 будет нулём, а *p1 — “рандом”:
auto p2 = std::make_unique<int>();


🔥 Если хочешь гарантированную инициализацию — используй {}/():

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
17👍10🔥6
😎 Отличная статья — про то, как быстро поднять HTTP-клиент/сервер на C++ с помощью cpp-httplib!

В этой статье:
• Как устроены базовые запросы и ответы (GET/POST), и как формировать маршруты;
• Как за пару функций запустить простой HTTP-сервер и обработчики эндпоинтов;
• Примеры работы с параметрами, JSON/формами и типичные “грабли” интеграции


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


📣 C++ Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥84
10👍6🔥3
Что же выведет консоль?
Anonymous Quiz
18%
A
18%
B
49%
C
15%
D
👍15🔥95👎2
This media is not supported in your browser
VIEW IN TELEGRAM
☕️ Sololearn — Introduction to C++ — это интерактивный курс для новичков!

Внутри — фундаментальные темы: переменные и типы данных, арифметика, условные операторы (if/else), циклы, массивы, функции, а также работа с header files.

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

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👎15👍76🤝4