/cpp-digest-8

C++ Дайджест №8 (2 сентября – 8 сентября 2024)

The UnlicenseUnlicense

cpp-digest-8

C++ Дайджест №8 (2 сентября – 8 сентября 2024)

Теги: дайджест, c++-дайджест, c++, c++17, c++26

Хабы: Программирование, C++

Аннотация

Привет, Хабр! Сегодня я хочу вам представить подборку интересных новостей и материалов по C++ за последнюю неделю.

Приятного чтения!

📝 Статьи

  1. Understanding the inner workings of C++ smart pointers - The shared_ptr — вам всегда было интересно, как устроен std::shared_ptr (cppreference) изнутри? Статья предлагает разбор минималистичной, но вполне себе полноценной его реализации.
  2. What’s new in C++26 (part 1) — Обзор свежепринятых в C++26 новинок: переменные-плейсхолдеры (cppreference), форматированные строки в static_assert и другое.
// Разве это не прекрасно, что мы можем написать так и на
// нас не будет ругаться компилятор?
auto [data, _] = get_data();
// И мы можем повторить этот _ в одной области видимости
// много раз!
auto [ptr, _] = std::to_chars(p, last, 42);

// Да, мы не могли использовать std::format в static_assert
// до C++26
static_assert(sizeof(int) == 4, std::format("Expected 4, actual {}", sizeof(int)));
  1. An Overview of C++26: The Library — Если предыдущая статья обозревает исключительно изменения в самом языке, то в этой статье речь идет об изменениях в стандартной библиотеке: std::string_view (cppreference) продолжают делать всё более и более полезным, ranges продолжают допиливать, а количество контейнеров в стандартной библиотеке всё продолжает увеличиваться:
// Динамически-расширяемый вектор с фиксированным
// capacity заказывали?
std::inplace_vector<int, 2> vec;
vec.push_back(1); // OK
vec.push_back(2); // OK
vec.push_back(3); // std::bad_alloc! Место на стеке закончилось!
  1. Structs and constructors — Структуры и конструкторы: нужно ли одно другим, или агрегатной инициализации хватит всем?
  2. Reader Q&A: What’s the best way to pass an istream parameter? — Знаток (председатель WG21) отвечает на вопрос: как лучше всего принять в функцию std::istream (cppreference). Спойлер (вы же догадались?):
template <typename S>
void add_from_stream( S&& s )
    requires std::is_convertible_v<S, std::istream const&>
{
    // do work + remember to use s as "std::forward<S>(s)"
}
  1. Synchronization Primitives in C++20 — Возвращаясь от мечт о прекрасном будущем (C++26) к реальности (C++20, если вам повезло): о std::latch (cppreference) и std::barrier (cppreference).
  2. Compressing floating-point numbers quickly by converting them to brain floats — Не хватает памяти на большие объемы double-ов? Как насчет того, чтобы сжать их до 16 бит (bfloat16)?

📺 Видео и доклады

  1. C++ Weekly - Ep 444 - GCC's Implicit constexpr — Обзор расширения GCC (GCC docs), делающего все inline функции в вашем коде constexpr, если они удовлетворяют всем требованиям constexpr-функций.

Послесловие

Дайджест составлен и опубликован при поддержке московского сообщества программистов C++ Moscow

Заметили ошибку или опечатку? Сообщите в личку (Telegram, Habr)

Прислать ссылку можно через форму обратной связи или просто написав мне в личные сообщения (Telegram, Habr)

← Предыдущий выпуск: C++ Дайджест №7