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

от автора

Привет, Хабр! Сегодня я хочу вам представить подборку интересных новостей и материалов по 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


ссылка на оригинал статьи https://habr.com/ru/articles/841742/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *