std::print(std::ostream)(3)
πΈ NAME πΈ
Okay so bestie, welcome to the std::print(std::ostream)(3) page from the C++ Standard Libary manual π β this one is literally all about std::print(std::ostream), the glow-up that formats your args with fmt and drops the result into an std::ostream. No cap, it's giving formatted-output main character energy β¨.
π¦ Synopsis π¦
Defined in header <ostream>
template< class... Args >
void print( std::ostream& os, std::format_string<Args...> fmt,
(since C++23)
Args&&... args );
So this is the whole vibe: it formats args according to the format string fmt, and then inserts the result into the os stream π«Ά.
If the ordinary literal encoding is UTF-8, it's equivalent to:
std::vprint_unicode(os, fmt.get(), std::make_format_args(args...));. Otherwise,std::vprint_nonunicode(os, fmt.get(), std::make_format_args(args...));.
π¨ Behavior is undefined ifstd::formatter<Ti, char>does not meet theBasicFormatterrequirements for anyTiinArgs(as required bystd::make_format_args). So likeβ¦ don't do that, bestie π.
π Parameters π
osβ output stream to insert data into.fmtβ an object that represents the format string. The format string consists of:- ordinary characters (except
{and}), which are copied unchanged to the output, - escape sequences
{{and}}, which are replaced with{and}respectively in the output, and - replacement fields.
- ordinary characters (except
Each replacement field has the following format:
{ arg-id (optional) } (1)
{ arg-id (optional) : format-spec } (2)
- replacement field without a format specification
- replacement field with a format specification
arg-idβ specifies the index of the argument inargswhose value is to be used for formatting; if it is omitted, the arguments are used in order. Thearg-ids in a format string must all be present or all be omitted. Mixing manual and automatic indexing is an error.format-specβ the format specification defined by thestd::formatterspecialization for the corresponding argument. Cannot start with}.- For basic types and standard string types, the format specification is interpreted as standard format specification.
- For chrono types, the format specification is interpreted as chrono format specification.
- For range types, the format specification is interpreted as range format specification.
- For
std::pairandstd::tuple, the format specification is interpreted as tuple format specification. - For
std::thread::idandstd::stacktrace_entry, see thread id format specification and stacktrace entry format specification. (since C++23) - For
std::basic_stacktrace, no format specifier is allowed. - For
std::filesystem::path, see path format specification. (since C++26) - For other formattable types, the format specification is determined by user-defined formatter specializations.
args...β arguments to be formatted.
β¨ Return value β¨
(none) β that's it, that's the whole return vibe π
.
π Exceptions π
std::bad_allocon allocation failure.- Propagate any exception thrown by any formatter, e.g.
std::format_error, without regard to the value ofos.exceptions()and without turning onios_base::badbitin the error state ofos. - May throw
ios_base::failurecaused byos.setstate(ios_base::badbit)which is called if an insertion intoosfails.
π§ Notes π§
Feature-test macro tea β:
__cpp_lib_printβ value202207L, std(C++23), feature: Formatted output__cpp_lib_formatβ value202207L, std(C++23), feature: Exposingstd::basic_format_string
π Example π
// Run this code
#include <array>
#include <cctype>
#include <cstdio>
#include <format>
#include <numbers>
#include <ranges>
#include <sstream>
int main()
{
std::array<char, 24> buf;
std::format_to(buf.begin(), "{:.15f}", std::numbers::sqrt2);
unsigned num{}, sum{};
auto v = buf
| std::views::filter(isdigit)
| std::views::transform([](char x) { return x - '0'; })
| std::views::take_while([&sum](char) { return sum < 42; });
for (auto n : v)
sum += n, ++num;
std::stringstream stream;
#ifdef __cpp_lib_print
std::print(stream,
#else
stream << std::format(
#endif
"β2 = {}...\n"
"The sum of its first {} digits is {}{}",
std::numbers::sqrt2, num, sum, '.'
);
std::puts(stream.str().data());
}
π Output π
β2 = 1.4142135623730951...
The sum of its first 13 digits is 42.
π See also π
println(std::ostream)(C++23) β outputs formatted representation of the arguments with appended'\n'(function template).print(C++23) β prints to stdout or a file stream using formatted representation of the arguments (function template).format(C++20) β stores formatted representation of the arguments in a new string (function template).
mwah π that's the whole page, bestie β it's from http://cppreference.com, stamped 2024.06.10, and it's the std::print(std::ostream)(3) page. periodt π
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms