Библиотека C/C++ разработчика | cpp, boost, qt
16.7K subscribers
2.26K photos
74 videos
16 files
4.66K links
Все самое полезное для плюсовика и сишника в одном канале.

Как запустить своего ии-агента: https://clc.to/tvpmDQ

По рекламе: @tproger_sales_bot

Обратная связь: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17

#WXSSA
Download Telegram
👀 Параметр this auto делает метод C++ шаблонным

В C++23 объект можно передать методу явным параметром. Но запись this auto self включает вывод типа и превращает метод в шаблон — это влияет на его поведение.

Если нужен конкретный тип, его можно указать через псевдоним:

struct Counter {
using Self = Counter;
int value;

int get(this Self self) {
return self.value;
}
};


Здесь self передаётся по значению. В статье разобраны варианты объявления, включая Reflection из C++26. Начните с выбора нужной семантики: копия объекта или ссылка, конкретный тип или шаблон. После этого выбирайте запись.

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🖥 Контракты C++26 связывают требования к аргументам с самой функцией

Функция ожидает положительный размер, допустимый индекс или непустой указатель. Эти требования удобно видеть рядом с её объявлением.

В разборе контрактов C++26 показаны предусловия и постусловия: как описывать входные требования и проверять результат выполнения.

Материал поможет разобраться с новым механизмом на небольших примерах. Возьмите функцию с понятным ограничением и сформулируйте отдельно требования к аргументам и свойства результата.

➡️ Навигация: Вакансии • Задачи • Собеседования

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2
🖥 std::optional хранит значение вместе с признаком его наличия

Поиск может ничего не найти, а вычисление — закончиться без результата. В C++17 такой исход можно выразить через std::optional<T>.

std::optional<int> result = 42;

if (result) {
std::cout << *result;
}


В обновлённом руководстве разобраны создание, проверка и получение значения.

При проектировании функции определите, что означает пустой результат. Затем выберите способ обработки: отдельную ветку, значение по умолчанию или передачу отсутствующего результата дальше.

➡️ Навигация: Вакансии • Задачи • Собеседования

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1😁1
🖥 Усиленные проверки стандартной библиотеки помогают обнаруживать неверный доступ к контейнерам

Обращение за границы контейнера нарушает требования операции. Усиленные проверки библиотеки позволяют раньше обнаружить такие ошибки и получить понятную точку сбоя.

В экспериментах с hardening разобраны конкретные нарушения и поведение проверок в контексте C++26.

Материал пригодится при настройке тестовых сборок. Проверьте возможности своей стандартной библиотеки и включите подходящий режим в CI, чтобы ошибки проявлялись на этапе тестирования.

➡️ Навигация: Вакансии • Задачи • Собеседования

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🔥1
🖥 Семафор C++20 ограничивает число одновременных операций

Допустим, к ресурсу можно обращаться только трём задачам одновременно. std::counting_semaphore хранит число разрешений: задача забирает одно перед работой и возвращает после завершения.

В руководстве по семафорам C++20 разобраны acquire, release, попытка захвата и бинарный семафор.

Подойдёт для ограничения параллельных обращений к ресурсу или организации взаимодействия потоков. При реализации сразу предусмотрите возврат разрешения при исключении — например, через объект, который освобождает его при выходе из области видимости.

➡️ Навигация: Вакансии • Задачи • Собеседования

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😢1
🖥 Пустой конструктор и = default по-разному влияют на инициализацию

Эти объявления выглядят почти одинаково, но дают типу разные свойства:

struct A {
int value;
A() = default;
};

struct B {
int value;
B() {}
};


При создании A a{}; поле обнулится. У B b{}; пользовательский конструктор оставит поле неинициализированным. Читать такое поле нельзя.

В разборе с примерами машинного кода показано и влияние на оптимизацию: в конкретном тесте GCC 15 и 16 создали более дорогой код для варианта с = default. При изменении конструктора проверяйте семантику инициализации и замеряйте нужный участок на своих компиляторах.

➡️ Навигация: Вакансии • Задачи • Собеседования

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1😁1
🖥 Неизменяемую таблицу строковых ключей можно построить при компиляции

HTTP-методы, имена протоколов и ключевые слова часто известны заранее. Для такого набора можно заранее подобрать хеширование без коллизий между его ключами.

В разборе perfect hashing на C++23 показана библиотека, которая строит таблицу при компиляции. При поиске вычисляется слот и выполняется сравнение с сохранённым ключом. Эта проверка позволяет отклонить строку, которой в наборе нет.

Подход стоит попробовать в часто вызываемом парсере с небольшим постоянным словарём. Сравните время поиска, длительность компиляции и размер кода с текущей реализацией. В статье есть исходники и результаты бенчмарков.

➡️ Навигация: Вакансии • Задачи • Собеседования

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
🖥 vcpkg позволяет выбирать степень сжатия бинарного кеша

При сохранении собранных зависимостей в кеш время уходит и на сжатие архивов. Более сильное сжатие уменьшает ZIP, но требует больше работы процессора.

В октябрьском обновлении vcpkg появился выбор уровня от 0 до 9:

vcpkg install --binary-cache-compression-level=1


Параметр также задаётся через VCPKG_BINARY_CACHE_COMPRESSION_LEVEL. Он относится к ZIP-кешу; упаковку через NuGet не меняет.

На CI сравните время сохранения кеша и его размер с текущими настройками. Слабое сжатие может оказаться выгодным на быстром хранилище, а при дорогой передаче данных важнее размер архива.

➡️ Навигация: Вакансии • Задачи • Собеседования

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
🖥 Заголовок debugging даёт общий API для программных брейкпоинтов

Для остановки в отладчике C++-проекты часто держат набор платформенных макросов. В проекте C++26 эту задачу решает заголовок <debugging>.

В разборе нового API показаны три функции: std::breakpoint(), std::is_debugger_present() и std::breakpoint_if_debugging(). Последняя запрашивает остановку только при подключённом отладчике.

Это пригодится для диагностических проверок, которые должны срабатывать при локальном разборе проблемы. Перед использованием проверьте поддержку в своей стандартной библиотеке. Безусловный breakpoint при отсутствии отладчика имеет поведение, определяемое реализацией, и может завершить процесс.

➡️ Навигация: Вакансии • Задачи • Собеседования

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰1
🖥 Qt Network мог исчерпать ресурсы при обработке HTTP-ответа

В Qt Network нашли ошибку, из-за которой обработка HTTP-ответа могла потреблять слишком много ресурсов. Она получила номер CVE-2026-116337.

Проверьте версию Qt, с которой собрано приложение, особенно если клиент обращается к внешним HTTP-серверам. Для исправления Qt рекомендует обновиться до 6.8.10, 6.12.1 или более поздней версии соответствующей ветки. Для 6.11 в бюллетене есть отдельные патчи к qtbase.

Если Qt поставляется вместе с вашим приложением, пересоберите и проверьте дистрибутив с исправленными библиотеками.

Бюллетень Qt и патчи

➡️ Навигация: Вакансии • Задачи • Собеседования

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
🖥 QRangeModel в Qt 6.12 добавляет сортировку для моделей на контейнерах C++

QRangeModel превращает контейнер C++ в модель для представлений Qt. В Qt 6.12 у модели появились встроенная сортировка, выбор роли для сравнения и настройка правил сортировки строк.

#include <QRangeModel>
#include <QStringList>

QRangeModel model(QStringList{"Gamma", "Alpha", "Beta"});
model.sort(0, Qt::AscendingOrder);


В примере модель получает собственный список строк. Для таблицы со сложными записями отдельно решите, по какой роли сравнивать значения. Если порядок зависит от языка, настройте QCollator через setSortCollator.

Что изменилось в Qt 6.12 · Документация QRangeModel

➡️ Навигация: Вакансии • Задачи • Собеседования

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1🥱1
🖥 Boost 1.92 позволяет указать header-only библиотеку как компонент CMake после b2 install

В Boost 1.92 конфигурация CMake, которую устанавливает b2 install, позволяет запрашивать библиотеки из заголовков как отдельные компоненты. Например, Boost.Mp11 можно подключить к цели app так:

find_package(Boost REQUIRED COMPONENTS mp11)
target_link_libraries(app PRIVATE Boost::mp11)


Цель Boost::mp11 передаст приложению настройки, нужные для работы с заголовками. Теперь запись одинаково работает с конфигурациями Boost, установленными через b2 и через CMake.

Заметки к Boost 1.92

➡️ Навигация: Вакансии • Задачи • Собеседования

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM