🔄 std::source_location: автоматическое логирование
Забудьте FILE и LINE! std::source_location автоматически получает информацию о местоположении в коде.
Важно:
Библиотека C/C++ разработчика #буст
Забудьте FILE и LINE! std::source_location автоматически получает информацию о местоположении в коде.
#include <iostream>
#include <source_location>
#include <string_view>
void log_error(std::string_view message,
const std::source_location& loc = std::source_location::current()) {
std::cout << "ОШИБКА в " << loc.file_name()
<< ":" << loc.line()
<< " в функции " << loc.function_name()
<< " - " << message << std::endl;
}
void problematic_function() {
log_error("Что-то пошло не так!"); // Автоматически получит location
}
int main() {
log_error("Ошибка инициализации");
problematic_function();
return 0;
}
Важно:
source_location
вычисляется в точке вызова, не в точке определения функции.Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Периодически требуется реализовать интеграцию с STL алгоритмами. Для этого необходимо реализовать правильные API.
Проблема: Нужно создать контейнер, работающий с range-based for и STL.
#include <iterator>
#include <algorithm>
#include <iostream>
template<typename T>
class CircularBuffer {
T* data;
size_t capacity_;
size_t size_;
size_t head_ = 0;
public:
explicit CircularBuffer(size_t capacity)
: data(new T[capacity]), capacity_(capacity), size_(0) {}
~CircularBuffer() { delete[] data; }
// Iterator class
class iterator {
T* ptr;
size_t capacity;
size_t index;
public:
using iterator_category = std::forward_iterator_tag;
using value_type = T;
using difference_type = std::ptrdiff_t;
using pointer = T*;
using reference = T&;
iterator(T* ptr, size_t capacity, size_t index)
: ptr(ptr), capacity(capacity), index(index) {}
reference operator*() { return ptr[index % capacity]; }
pointer operator->() { return &ptr[index % capacity]; }
iterator& operator++() {
++index;
return *this;
}
iterator operator++(int) {
iterator tmp = *this;
++index;
return tmp;
}
bool operator==(const iterator& other) const {
return index == other.index;
}
bool operator!=(const iterator& other) const {
return !(*this == other);
}
};
void push(const T& item) {
data[(head_ + size_) % capacity_] = item;
if (size_ < capacity_) {
++size_;
} else {
++head_;
head_ %= capacity_;
}
}
iterator begin() { return iterator(data, capacity_, head_); }
iterator end() { return iterator(data, capacity_, head_ + size_); }
size_t size() const { return size_; }
bool empty() const { return size_ == 0; }
};
int main() {
CircularBuffer<int> buffer(5);
// Заполняем буфер
for (int i = 1; i <= 7; ++i) {
buffer.push(i);
}
// Range-based for работает!
for (const auto& item : buffer) {
std::cout << item << " ";
}
std::cout << std::endl;
// STL алгоритмы работают!
auto it = std::find(buffer.begin(), buffer.end(), 5);
if (it != buffer.end()) {
std::cout << "Found: " << *it << std::endl;
}
}
Частые ошибки: Не реализовать все необходимые operator для итератора.
💡 Совет: Правильные итераторы делают ваш контейнер first-class citizen в ST.
Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
📰 Свеженькое из мира C++
Недельный дайджест новостей о разных аспектах программирования и интересных проектах в мире C++.
🥳 Интересное:
• Qt Quick/QML — декларативный UI для C++ приложений
• Отладка сопрограмм C++ — доклад о практических аспектах отладки сопрограмм
😎 Полезное:
• Исключения в C++ — набор карточек на базовые темы касающиеся исключений
• Поиск и исправление ошибок в C++ — промпт с помощью которого можно быстро находить ошибки в коде
• std::source_location — полезная фишка C++ с помощью которой можно облегчить легирование
• Создание собственного итератора для контейнера
• Сборка фреймворка QT из исходников
🖨️Интересные проекты:
• LEGO Island — портативная версия LEGO Island основанная на декомпилированном проекте
• Hyprland — независимый тайловый компоновщик
• Dragonfly — in-memory хранилище данных
Библиотека C/C++ разработчика #свежак
Недельный дайджест новостей о разных аспектах программирования и интересных проектах в мире C++.
🥳 Интересное:
• Qt Quick/QML — декларативный UI для C++ приложений
• Отладка сопрограмм C++ — доклад о практических аспектах отладки сопрограмм
😎 Полезное:
• Исключения в C++ — набор карточек на базовые темы касающиеся исключений
• Поиск и исправление ошибок в C++ — промпт с помощью которого можно быстро находить ошибки в коде
• std::source_location — полезная фишка C++ с помощью которой можно облегчить легирование
• Создание собственного итератора для контейнера
• Сборка фреймворка QT из исходников
🖨️Интересные проекты:
• LEGO Island — портативная версия LEGO Island основанная на декомпилированном проекте
• Hyprland — независимый тайловый компоновщик
• Dragonfly — in-memory хранилище данных
Библиотека C/C++ разработчика #свежак
Forwarded from Библиотека задач по C++ | тесты, код, задания
Forwarded from Библиотека задач по C++ | тесты, код, задания
Что выведет программа в C++20?
Anonymous Quiz
45%
1212
25%
Ошибка компиляции для d1
3%
0012
5%
1200
23%
Ошибка компиляции для обеих
🏖 Подборка вакансий для C++-разработчиков за неделю
Senior С++ / Rust Developer — от 300 000 и до 450 000 ₽ Гибрид (Москва, Санкт-Петербург)
Разработчик C++ — от 350 000 и до 500 000 ₽ Гибрид (Москва)
C/C++ Developer — от 350 000 и до 500 000 ₽ Гибрид (Москва)
Разработчик на C++ — от 250 000 и до 350 000 ₽ Офис (Москва)
➡️ Еще больше топовых вакансий — в нашем канале C++ jobs
Библиотека C/C++ разработчика
Senior С++ / Rust Developer — от 300 000 и до 450 000 ₽ Гибрид (Москва, Санкт-Петербург)
Разработчик C++ — от 350 000 и до 500 000 ₽ Гибрид (Москва)
C/C++ Developer — от 350 000 и до 500 000 ₽ Гибрид (Москва)
Разработчик на C++ — от 250 000 и до 350 000 ₽ Офис (Москва)
➡️ Еще больше топовых вакансий — в нашем канале C++ jobs
Библиотека C/C++ разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Часто возникает ситуация, когда нужно добавить новую функциональность в существующую функцию. В C++ это особенно актуально при работе с шаблонами, алгоритмами и обработкой данных.
Для того чтобы корректно добавить параметр в функцию и расширить её возможности, используй следующий промпт:
Add a parameter to this function to do [ФУНКЦИОНАЛЬНОСТЬ]
[ВСТАВТЕ ВАШ КОД ЗДЕСЬ]
До:
void processData(const std::vector<int>& data) {
for (const auto& item : data) {
std::cout << item << std::endl;
}
}
После (добавили параметр для кастомного форматирования):
void processData(const std::vector<int>& data,
const std::string& format = "{}: {}") {
for (size_t i = 0; i < data.size(); ++i) {
std::cout << std::format(format, i, data[i]) << std::endl;
}
}
✏️ Как часто вам приходится расширять функциональность существующих функций?
Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Последняя неделя перед стартом курса по AI-агентам
Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место
На курсе:
— разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах
📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями
И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»
👉 Курс здесь
Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место
На курсе:
— разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах
📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями
И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»
👉 Курс здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
✅ Чек-лист: Автоматическое форматирование кода для единообразного стиля в команде
🎯 Настройка и конфигурация
✓ Создайте .clang-format файл в корне проекта
✓ Выберите базовый стиль
✓ Настройте отступы, скобки и переносы строк
✓ Добавьте специфичные правила для вашего проекта
🎯 Интеграция с инструментами
✓ Настройте автоформатирование в IDE
✓ Используйте pre-commit hooks для Git
✓ Интегрируйте с CI для проверки стиля
✓ Добавьте команды форматирования в CMake
🎯 Командная работа
✓ Документируйте стиль кода в README
✓ Проводите code review с проверкой стиля
✓ Используйте .clang-format-ignore для исключений
✓ Настройте автоматическое форматирование
🎯 Продвинутые возможности
✓ Используйте clang-format-diff для частичного форматирования
✓ Настройте языкоспецифичные правила
✓ Применяйте макросы для кастомизации
✓ Интегрируйте с другими linter'ами
Как измерить результат: Подсчитайте количество комментариев по стилю кода в code review.
Библиотека C/C++ разработчика #буст
🎯 Настройка и конфигурация
✓ Создайте .clang-format файл в корне проекта
✓ Выберите базовый стиль
✓ Настройте отступы, скобки и переносы строк
✓ Добавьте специфичные правила для вашего проекта
🎯 Интеграция с инструментами
✓ Настройте автоформатирование в IDE
✓ Используйте pre-commit hooks для Git
✓ Интегрируйте с CI для проверки стиля
✓ Добавьте команды форматирования в CMake
🎯 Командная работа
✓ Документируйте стиль кода в README
✓ Проводите code review с проверкой стиля
✓ Используйте .clang-format-ignore для исключений
✓ Настройте автоматическое форматирование
🎯 Продвинутые возможности
✓ Используйте clang-format-diff для частичного форматирования
✓ Настройте языкоспецифичные правила
✓ Применяйте макросы для кастомизации
✓ Интегрируйте с другими linter'ами
Как измерить результат: Подсчитайте количество комментариев по стилю кода в code review.
Библиотека C/C++ разработчика #буст
🧠 «Поиграйся с LLM, почитай про агентов — и сам поймёшь, как это работает»
Это один из самых бесполезных советов, который мы слышали в адрес тех, кто хочет разобраться в AI-агентах.
Поиграйся — это как?
Потыкать пару промптов в ChatGPT и решить, что теперь ты можешь строить мультиагентные системы? 🤡 Ну-ну.
AI-агенты — это не «очередная обёртка над GPT». Это архитектура. Состояния, инструменты, цепочки вызовов, память, оценка качества и адекватность поведения.
➡️ Чтобы разобраться, нужно:
— понимать, как устроен LLM под капотом
— уметь подключать внешние данные (RAG, retrievers, rerankers)
— уметь масштабировать и дебажить поведение агентов
— разбираться в фреймворках вроде AutoGen, CrewAI, LangChain
— знать, как всё это тащится в прод
Если вы реально хотите не «поиграться», а научиться собирать рабочие агентные системы — у нас стартует курс по разработке ИИ-агентов 5го июля
P.S: не упусти свой шанс, промокод:LASTCALL на 10.000₽
Это один из самых бесполезных советов, который мы слышали в адрес тех, кто хочет разобраться в AI-агентах.
Поиграйся — это как?
Потыкать пару промптов в ChatGPT и решить, что теперь ты можешь строить мультиагентные системы? 🤡 Ну-ну.
AI-агенты — это не «очередная обёртка над GPT». Это архитектура. Состояния, инструменты, цепочки вызовов, память, оценка качества и адекватность поведения.
➡️ Чтобы разобраться, нужно:
— понимать, как устроен LLM под капотом
— уметь подключать внешние данные (RAG, retrievers, rerankers)
— уметь масштабировать и дебажить поведение агентов
— разбираться в фреймворках вроде AutoGen, CrewAI, LangChain
— знать, как всё это тащится в прод
Если вы реально хотите не «поиграться», а научиться собирать рабочие агентные системы — у нас стартует курс по разработке ИИ-агентов 5го июля
P.S: не упусти свой шанс, промокод:
⚠️ Частая ошибка: почему std::vector<bool> — это не то, что вы думаете
Это один из самых неожиданных моментов в STL. std::vector<bool> ведет себя не как обычный vector!
Причина: std::vector<bool> оптимизирован для экономии памяти (1 бит на элемент), поэтому не может дать настоящие ссылки.
🔎 Сталкивались ли вы с этой особенностью? Как решали проблему?
Библиотека C/C++ разработчика #буст
Это один из самых неожиданных моментов в STL. std::vector<bool> ведет себя не как обычный vector!
// Обычный vector - все работает как ожидается
std::vector<int> vec_int = {1, 2, 3};
int& ref = vec_int[0]; // Настоящая ссылка
int* ptr = &vec_int[0]; // Настоящий указатель
// vector<bool> - сюрприз!
std::vector<bool> vec_bool = {true, false, true};
// auto& ref = vec_bool[0]; // Ошибка компиляции!
// bool* ptr = &vec_bool[0]; // Тоже ошибка!
// Это работает, но ref - не настоящая ссылка
auto ref = vec_bool[0]; // Тип: std::vector<bool>::reference
ref = false; // Работает, но через прокси-объект
// Если нужен настоящий vector<bool>
std::deque<bool> real_bool_container = {true, false, true};
bool& real_ref = real_bool_container[0]; // Настоящая ссылка!
Причина: std::vector<bool> оптимизирован для экономии памяти (1 бит на элемент), поэтому не может дать настоящие ссылки.
🔎 Сталкивались ли вы с этой особенностью? Как решали проблему?
Библиотека C/C++ разработчика #буст
👾 C++26 — что нового и почему стандартизация это так сложно
💡 Антон Полухин и Павел Новиков разбирают, что нового в C++26 и почему процесс стандартизации настолько сложен.
❗ Ключевые моменты обсуждения:
• контракты и рефлексия наконец добавлены в C++26
• стандартизация учитывает интересы всех участников экосистемы
• модули в C++20 — пример удачного компромисса после 5 лет обсуждений
Основной фокус — понимание того, что комитет по стандартизации должен учитывать интересы разработчиков мобильных устройств, бэкенд-приложений, экзотических платформ и крупных компаний одновременно.
Особенно интересно для тех, кто хочет понять механизмы принятия решений в мире C++ и почему некоторые «очевидные» фичи добавляются годами.
Вы узнаете, что медленность стандартизации — это не бюрократия, а необходимость найти решение, которое работает для всех участников экосистемы, от разработчиков встроенных систем до авторов высокоуровневых библиотек.
👉 Видео
Библиотека C/C++ разработчика #буст
💡 Антон Полухин и Павел Новиков разбирают, что нового в C++26 и почему процесс стандартизации настолько сложен.
❗ Ключевые моменты обсуждения:
• контракты и рефлексия наконец добавлены в C++26
• стандартизация учитывает интересы всех участников экосистемы
• модули в C++20 — пример удачного компромисса после 5 лет обсуждений
Основной фокус — понимание того, что комитет по стандартизации должен учитывать интересы разработчиков мобильных устройств, бэкенд-приложений, экзотических платформ и крупных компаний одновременно.
Особенно интересно для тех, кто хочет понять механизмы принятия решений в мире C++ и почему некоторые «очевидные» фичи добавляются годами.
Вы узнаете, что медленность стандартизации — это не бюрократия, а необходимость найти решение, которое работает для всех участников экосистемы, от разработчиков встроенных систем до авторов высокоуровневых библиотек.
👉 Видео
Библиотека C/C++ разработчика #буст