В 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
Arthur O’Dwyer
Spelling the type of a “self” parameter with Reflection
Over on std-proposals,
it was pointed out that using C++23 “explicit object parameter”
syntax without using auto (since auto makes your member function into a
template, changing its semantics) is sometimes cumbersome:
it was pointed out that using C++23 “explicit object parameter”
syntax without using auto (since auto makes your member function into a
template, changing its semantics) is sometimes cumbersome:
👍1
Функция ожидает положительный размер, допустимый индекс или непустой указатель. Эти требования удобно видеть рядом с её объявлением.
В разборе контрактов C++26 показаны предусловия и постусловия: как описывать входные требования и проверять результат выполнения.
Материал поможет разобраться с новым механизмом на небольших примерах. Возьмите функцию с понятным ограничением и сформулируйте отдельно требования к аргументам и свойства результата.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2
Поиск может ничего не найти, а вычисление — закончиться без результата. В 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
Допустим, к ресурсу можно обращаться только трём задачам одновременно. std::counting_semaphore хранит число разрешений: задача забирает одно перед работой и возвращает после завершения.
В руководстве по семафорам C++20 разобраны acquire, release, попытка захвата и бинарный семафор.
Подойдёт для ограничения параллельных обращений к ресурсу или организации взаимодействия потоков. При реализации сразу предусмотрите возврат разрешения при исключении — например, через объект, который освобождает его при выходе из области видимости.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😢1
Эти объявления выглядят почти одинаково, но дают типу разные свойства:
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
При сохранении собранных зависимостей в кеш время уходит и на сжатие архивов. Более сильное сжатие уменьшает 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
Для остановки в отладчике 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-ответа могла потреблять слишком много ресурсов. Она получила номер 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 превращает контейнер 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 конфигурация 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