5 Aug 2026, 12:38 UTC271 views4 reactionsread 7 August 2026 Move-семантика: где можно ловко сэкономить
Многие знают про std::move, но не всегда используют его там, где это реально ускоряет код. Простой пример — возврат локального объекта из функции:
#include <string>
std::string make_string() {
std::string s = "Hello";
return s; // RVO или move
}
С C++17 тут почти всегда RVO (Return Value Optimization). Но если RVO невозможен (например, возвращаем тернарный опер…
👍2❤1❤🔥1
3 Aug 2026, 10:31 UTC356 views7 reactionsread 7 August 2026 Зачем std::move от std::string в emplace_back?
Кажется, emplace_back(std::move(str)) — избыточно: ведь emplace_back сам конструирует объект на месте. Но с std::string и другими перемещаемыми типами всё не так просто.
Пример:
std::vector<std::string> vec;
std::string str = "hello";
vec.emplace_back(str); // копия
vec.emplace_back(std::move(str)); // перемещение
Почему? Потому что:
> emplace_back в…
👍4❤3
31 Jul 2026, 06:02 UTC494 views7 reactionsread 7 August 2026 Что такое ADL и как она может вас подставить
Argument-Dependent Lookup (ADL) — это фича, которая может как упростить код, так и привести к сюрпризам.
Представьте:
namespace math {
struct Vec {};
void print(const Vec&) {
std::cout << "Vec\n";
}
}
void foo() {
math::Vec v;
print(v); // компилятор найдёт math::print через ADL!
}
Хотя print не в текущем скоупе, компилятор ищет её в nam…
👍3✍2❤1🤝1
29 Jul 2026, 07:09 UTC494 views4 reactionsread 7 August 2026 Photo
std::thread
std::thread является частью стандартной библиотеки C++ и предоставляет возможность создания и управления потоками выполнения. Он позволяет запускать функции в отдельных потоках, обеспечивая параллельное выполнение кода.
Обратите внимание, что после создания потока std::thread, вы должны вызвать join() или detach() для корректной обработки завершения потока.
В приведенном примере мы использовали join(),…
👍2❤1🔥1
27 Jul 2026, 06:58 UTC488 views4 reactionsread 7 August 2026 Полезные функции, которые будут полезны продвинутым C++ разработчикам.
1. void assert_or_throw(bool cond, const std::string& msg)
Универсальная замена assert в runtime-среде:
void assert_or_throw(bool cond, const std::string& msg) {
if (!cond) throw std::runtime_error(msg);
}
2. template<typename T> std::string to_string_precise(const T& val, int precision = 6)
Преобразование чисел с точностью:
template…
👍2🔥2
25 Jul 2026, 11:09 UTC387 views6 reactionsread 7 August 2026 🚀 Подборка полезных IT каналов в Max
Системное администрирование, DevOps 📌
https://max.ru/i_odmin Все для системного администратора
https://max.ru/bash_srv Bash Советы
https://max.ru/sysadminof Книги для админов, полезные материалы
https://max.ru/i_odmin_book Библиотека Системного Администратора
https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др.
https://max.ru/tipsysdmin Типичный Сисадмин
https://max…
💩4❤1👎1
23 Jul 2026, 13:10 UTC526 views8 reactionsread 7 August 2026 🧵 Сегодня покажу вам простой способ логгировать вызовы функций в C++ — пригодится для отладки и анализа кода.
Часто бывает нужно понять, какие функции вызываются, в каком порядке и с какими параметрами. Вручную вставлять std::cout — неудобно. Вместо этого используем RAII-макрос с выводом в консоль:
#include <iostream>
#include <string>
struct FunctionLogger {
std::string func_name;
FunctionLogger(const st…
👍7🔥1
21 Jul 2026, 08:27 UTC600 views5 reactionsread 7 August 2026 Невидимый UB: возвращаем ссылку на локальную переменную
Одна из самых коварных ошибок в C++ — возврат ссылки на переменную, срок жизни которой закончился. Казалось бы, всё компилируется, запускается... и даже иногда "работает". А под капотом — undefined behavior.
Пример:
const std::string& getName() {
std::string name = "John";
return name; // 💥 Возвращаем ссылку на локальный объект
}
Функция возвращае…
👍5
20 Jul 2026, 05:59 UTC703 views5 reactionsread 7 August 2026 Тема: Почему std::vector<bool> - не совсем std::vector
На первый взгляд std::vector<bool> — обычный вектор, только из булевых значений. Но это особенный шаблон. Вместо хранения bool как полноценного байта, он упаковывает их в биты. Экономит память? Да. Но есть нюансы.
Пример:
std::vector<bool> flags = {true, false, true};
auto x = flags[0]; // Не bool, а прокси-объект!
bool y = flags[0]; // OK — коп…
👍2🔥2❤1
15 Jul 2026, 20:10 UTC831 views5 reactionsread 7 August 2026 Ключевые библиотеки Boost, которые полезно знать каждому C++ разработчику
Вот топ-5 библиотек Boost:
1️⃣ Boost.Asio
Асинхронный ввод-вывод и сетевое программирование. Незаменим для серверных приложений.
2️⃣ Boost.Beast
HTTP и WebSocket клиенты/серверы. Построен на Asio.
3️⃣ Boost.Serialization
Сериализация сложных структур данных в потоки байтов и обратно.
4️⃣ Boost.Graph
Алгоритмы на графах: поиск путей, обходы…
👍4❤1
14 Jul 2026, 05:11 UTC713 views4 reactionsread 7 August 2026 Зачем [[nodiscard]] нужен не только для возврата значения
Если ты думаешь, что [[nodiscard]] — это просто защита от игнора Result, то вот фокус: его можно вешать и на классы, и на функции, и даже на enum — и это реально помогает избежать багов.
Пример:
struct [[nodiscard]] Error {
std::string message;
};
Error do_something() {
return {"Что-то пошло не так"};
}
void foo() {
do_something(); // warning…
🔥2❤1👍1
10 Jul 2026, 08:02 UTC743 views4 reactionsread 7 August 2026 Сейчас покажу вам простой, но очень полезный приём, как аккуратно и безопасно управлять ресурсами в C++ с помощью RAII (Resource Acquisition Is Initialization).
Когда вы работаете с ресурсами (файлы, сокеты, мьютексы и т.д.), важно не забывать освобождать их. Особенно если программа может завершиться по исключению. И вот тут RAII — наш лучший друг.
Рассмотрим пример:
#include <fstream>
#include <string>
void wri…
👍4
Showing the 12 most recent of 20 posts we hold for @cpp_geek. View and reaction counts are the latest single reading for each post, not a live figure, and a recent post is still accumulating both. A view count marked ≈ was rounded by Telegram before we ever saw it — t.me prints views in full below 1,000 and to three significant figures above, so ≈1,200,000 means somewhere between 1,150,000 and 1,249,999. Unmarked counts are exact. Text is reproduced from the public post preview and truncated for length.