std:: print
|
Определено в заголовочном файле
<print>
|
||
|
template
<
class
...
Args
>
void print ( std:: format_string < Args... > fmt, Args && ... args ) ; |
(1) | (начиная с C++23) |
|
template
<
class
...
Args
>
void
print
(
std::
FILE
*
stream,
|
(2) | (начиная с C++23) |
Форматируйте args в соответствии со строкой формата fmt и выводите результат в выходной поток.
? std:: vprint_unicode ( stream, fmt. str , std:: make_format_args ( args... ) )
: std :: vprint_unicode_buffered ( stream, fmt. str , std:: make_format_args ( args... ) ) ; .
? std:: vprint_nonunicode ( stream, fmt. str , std:: make_format_args ( args... ) )
: std :: vprint_nonunicode_buffered ( stream, fmt. str , std:: make_format_args ( args... ) ) ; .
Если
std::
formatter
<
Ti,
char
>
не соответствует требованиям
BasicFormatter
для любого
Ti
в
Args
(как требуется
std::make_format_args
), поведение не определено.
Содержание |
Параметры
| stream | - | выходной файловый поток для записи | ||||||||||||||||||||||||||||||||||||||||||||||
| fmt | - |
Каждое поле замены имеет следующий формат:
1)
поле замены без спецификации формата
2)
поле замены со спецификацией формата
|
||||||||||||||||||||||||||||||||||||||||||||||
| args... | - | аргументы для форматирования | ||||||||||||||||||||||||||||||||||||||||||||||
Исключения
- std::bad_alloc при ошибке выделения памяти.
- std::system_error , если запись в поток завершается неудачей.
- Пробрасывает любое исключение, выброшенное используемыми formatters , например std::format_error .
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_print
|
202207L
|
(C++23) | Форматированный вывод |
202403L
|
(C++26)
(DR23) |
Небуферизованный форматированный вывод | |
202406L
|
(C++26)
(DR23) |
Включение небуферизованного форматированного вывода для большего количества форматируемых типов | |
__cpp_lib_format
|
202207L
|
(C++23) | Предоставление доступа к std::basic_format_string |
Пример
#include <cstdio> #include <filesystem> #include <print> int main() { std::print("{2} {1}{0}!\n", 23, "C++", "Hello"); // перегрузка (1) const auto tmp{std::filesystem::temp_directory_path() / "test.txt"}; if (std::FILE* stream{std::fopen(tmp.c_str(), "w")}) { std::print(stream, "File: {}", tmp.string()); // перегрузка (2) std::fclose(stream); } }
Вывод:
Hello C++23!
Отчеты о дефектах
Следующие отчеты об изменениях в поведении, являющиеся дефектными, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| P3107R5 | C++23 | only buffered printing operations can be performed | can perform unbuffered printing operations |
| P3235R3 | C++23 |
the names of the functions added
by P3107R5 were misleading |
changed the function names |
Смотрите также
|
(C++23)
|
то же, что
std::print
, но каждый вывод завершается дополнительным переводом строки
(шаблон функции) |
|
(C++23)
|
выводит
форматированное
представление аргументов
(шаблон функции) |
|
(C++20)
|
сохраняет форматированное представление аргументов в новой строке
(шаблон функции) |
|
(C++20)
|
записывает форматированное представление аргументов через выходной итератор
(шаблон функции) |
|
(C++11)
|
выводит форматированные данные в
stdout
, файловый поток или буфер
(функция) |