Namespaces
Variants

std:: println

From cppreference.net
< cpp ‎ | io
Определено в заголовке <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, "{} \n " , std:: format ( fmt, std:: forward < Args > ( args ) ... ) ) ;

(до C++26)

std:: print ( stream, std:: runtime_format ( std:: string ( fmt. get ( ) ) + ' \n ' ) ,
std:: forward < Args > ( args ) ... )

(начиная с C++26)
3) Эквивалентно std :: println ( stdout ) .
4) Эквивалентно std:: print ( stream, " \n " ) .

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

Содержание

Параметры

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

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

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

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

format-spec - спецификация формата, определяемая специализацией std::formatter для соответствующего аргумента. Не может начинаться с } .

(since C++23)
(since C++26)
  • Для других форматируемых типов спецификация формата определяется пользовательскими специализациями formatter .
args... - аргументы для форматирования

Исключения

Примечания

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

Макрос тестирования возможностей Значение Стандарт Возможность
__cpp_lib_print 202207L (C++23) Форматированный вывод
202403L (C++26) Небуферизованный форматированный вывод [1]
__cpp_lib_format 202207L (C++23) Предоставление std::basic_format_string
  1. Хотя P3107R5 принят как DR (Defect Report), std::runtime_format доступен только начиная с C++26. В результате, данное исправление не может быть применено в C++23.

Пример

#include <print>
int main()
{
    // Каждый вызов std::println завершается переводом строки
    std::println("Please"); // перегрузка (1)
    std::println("enter"); // (1)
    std::print("pass");
    std::print("word");
    std::println(); // (3); допустимо начиная с C++26; тот же эффект, что и std::print("\n"); 
}

Вывод:

Please
enter
password

Смотрите также

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