Spec-Zone.ru › C++

std::println

Определён в заголовочном файле <print>
template< class... Args >
void println( std::format_string<Args...> fmt, Args&&... args );
(1) (начиная с C++23)
template< class... Args >
void println( std::FILE* stream,
              std::format_string<Args...> fmt, Args&&... args );
(2) (начиная с C++23)
void println();
(3) (начиная с C++26)
void println( std::FILE* stream );
(4) (начиная с C++26)

Форматирует args в соответствии со строкой формата fmt с добавлением '\n' (то есть каждый вывод завершается символом новой строки) и выводит результат в поток.

1) Эквивалентно std::println(stdout, fmt, std::forward<Args>(args)...).
2) Эквивалентно
std::print(stream, std::dynamic_format(std::string(fmt.get()) + '\n'),
           std::forward<Args>(args)...)
3) Эквивалентно std::println(stdout).
4) Эквивалентно std::print(stream, "\n").

Если std::formatter<Ti,char> не соответствует требованиям BasicFormatter для любого Ti в Args (как того требует std::make_format_args), поведение не определено.

Параметры

stream - выходной файловый поток для записи
fmt - объект, представляющий строку формата. Строка формата состоит из
  • обычных символов (кроме { и }), которые копируются в вывод без изменений,
  • управляющих последовательностей {{ и }}, которые заменяются в выводе соответственно на { и }, и
  • полей подстановки.

Каждое поле подстановки имеет следующий формат:

{ arg-id (необязательно) } (1)
{ arg-id (необязательно) : format-spec } (2)
1) поле подстановки без спецификации формата 2) поле подстановки со спецификацией формата
arg-id - задаёт индекс аргумента в args, значение которого будет использоваться для форматирования; если он опущен, аргументы используются по порядку.

Все значения arg-id в строке формата должны быть либо указаны, либо опущены. Смешивание ручной и автоматической индексации является ошибкой.

format-spec - спецификация формата, определённая специализацией std::formatter для соответствующего аргумента. Не может начинаться с }.
  • Для базовых типов и стандартных строковых типов спецификация формата интерпретируется как стандартная спецификация формата.
  • Для типов chrono спецификация формата интерпретируется как спецификация формата chrono.
  • Для типов-диапазонов спецификация формата интерпретируется как спецификация формата диапазона.
  • Для std::pair и std::tuple спецификация формата интерпретируется как спецификация формата кортежа.
  • Для std::thread::id и std::stacktrace_entry см. спецификацию формата идентификатора потока и спецификацию формата записи трассировки стека.
  • Для std::basic_stacktrace спецификатор формата не допускается.
(начиная с C++23)
  • Для std::filesystem::path см. спецификацию формата пути.
(начиная с C++26)
  • Для других форматируемых типов спецификация формата определяется пользовательскими специализациями formatter.
args... - аргументы для форматирования

Исключения

  • std::bad_alloc при ошибке выделения памяти.
  • std::system_error, если запись в поток завершается неудачно.
  • Передаёт любое исключение, выброшенное используемыми форматтерами, например std::format_error.

Примечания

Хотя перегрузки (3,4) добавлены в C++26, все известные реализации предоставляют их в режиме C++23.

Макрос проверки возможностей Значение Стандарт Возможность
__cpp_lib_print 202207L (C++23) Форматированный вывод
202403L (C++26)
(DR23)
Небуферизованный форматированный вывод
__cpp_lib_format 202207L (C++23) Предоставление std::basic_format_string

Пример

#include <print>

int main()
{
    // Each call to std::println ends with new-line
    std::println("Please"); // overload (1)
    std::println("enter"); // (1)
    
    std::print("pass");
    std::print("word");
    
    std::println(); // (3); valid since C++26; same effect as std::print("\n"); 
}

Вывод:

Please
enter
password

См. также

print
(C++23)
выводит данные в stdout или файловый поток, используя форматированное представление аргументов
(шаблон функции)
println(std::ostream)
(C++23)
выводит форматированное представление аргументов с добавлением '\n'
(шаблон функции)
format
(C++20)
сохраняет форматированное представление аргументов в новой строке
(шаблон функции)
printffprintfsprintfsnprintf
(C++11)
выводит форматированные данные в stdout, файловый поток или буфер
(функция)

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

Spec-Zone.ru

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