Spec-Zone.ru › C++

std::enable_nonlocking_formatter_optimization

Определён в заголовочном файле <format>
template< class T >
constexpr bool enable_nonlocking_formatter_optimization = false;
(начиная с C++23)

Этот шаблон может использоваться реализациями для эффективной реализации std::print и std::println.

Если std::enable_nonlocking_formatter_optimization<T> является true, печать аргумента типа T может выполняться более эффективным способом (подробности см. в разделе std::print). Специализации std::enable_nonlocking_formatter_optimization могут быть true в следующих случаях:

  • T является одним из типов, для которых std::formatter<T,CharT> является базовой стандартной специализацией или стандартной специализацией для библиотечного типа (см. ниже).
  • Программа может специализировать этот шаблон для любого cv-неквалифицированного типа, определённого программой T. Такие специализации должны быть допустимы в константных выражениях и иметь тип constbool.

Базовые стандартные специализации

В следующем списке CharT — это либо char, либо wchar_t, а ArithmeticT — любой cv-неквалифицированный арифметический тип, кроме char, wchar_t, char8_t, char16_t и char32_t:

Флаг отсутствия блокировок для форматтеров символов
template<>
constexpr bool enable_nonlocking_formatter_optimization<CharT> = true;
(1)
Флаг отсутствия блокировок для строковых форматтеров
template<>
constexpr bool enable_nonlocking_formatter_optimization<CharT*> = true;
(2)
template<>
constexpr bool enable_nonlocking_formatter_optimization<const CharT*> = true;
(3)
template< std::size_t N >
constexpr bool enable_nonlocking_formatter_optimization<CharT[N]> = true;
(4)
template< class Traits, class Alloc >
constexpr bool enable_nonlocking_formatter_optimization
    <std::basic_string<CharT, Traits, Alloc>> = true;
(5)
template< class Traits >
constexpr bool enable_nonlocking_formatter_optimization
    <std::basic_string_view<CharT, Traits>> = true;
(6)
Флаг отсутствия блокировок для арифметических форматтеров
template<>
constexpr bool enable_nonlocking_formatter_optimization<ArithmeticT> = true;
(7)
Флаг отсутствия блокировок для форматтеров указателей
template<>
constexpr bool enable_nonlocking_formatter_optimization<std::nullptr_t> = true;
(8)
template<>
constexpr bool enable_nonlocking_formatter_optimization<void*> = true;
(9)
template<>
constexpr bool enable_nonlocking_formatter_optimization<const void*> = true;
(10)

Стандартные специализации для библиотечных типов

Специализации enable_nonlocking_formatter_optimization для всех специализаций следующих стандартных шаблонов определены как true:

  • std::chrono::zoned_time, если тип его параметра шаблона TimeZonePtr — conststd::chrono::time_zone*

Специализации enable_nonlocking_formatter_optimization для всех специализаций следующих стандартных шаблонов определены как условно true:

  • std::pair
  • std::tuple
  • std::chrono::duration

Специализация enable_nonlocking_formatter_optimization для всех форматируемых типов диапазонов всегда определена как false, если вид форматирования диапазона не равен std::range_format::disabled.

Примечания

Макрос проверки возможностей Значение Стандарт Возможность
__cpp_lib_print 202403L (C++26)
(DR23)
Форматированный вывод с блокировкой потока
202406L (C++26)
(DR23)
Включение оптимизации форматтера без блокировок для большего числа форматируемых типов

См. также

formatter
(C++20)
определяет правила форматирования для заданного типа
(шаблон класса)
print
(C++23)
выводит в stdout или файловый поток аргументы в форматированном представлении
(шаблон функции)
println
(C++23)
то же, что и std::print, за исключением того, что после каждого вывода добавляется символ новой строки
(шаблон функции)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/format/enable_nonlocking_formatter_optimization

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API