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:
Специализация enable_nonlocking_formatter_optimization для всех форматируемых типов диапазонов всегда определена как false, если вид форматирования диапазона не равен std::range_format::disabled.
Примечания
| Макрос проверки возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_print | 202403L |
(C++26) (DR23) | Форматированный вывод с блокировкой потока |
202406L |
(C++26) (DR23) | Включение оптимизации форматтера без блокировок для большего числа форматируемых типов |
См. также
|
(C++20) | определяет правила форматирования для заданного типа (шаблон класса) |
|
(C++23) | выводит в stdout или файловый поток аргументы в форматированном представлении (шаблон функции) |
|
(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