std::print(std::ostream)
Von cppreference.com
< cpp | io | basic ostream
| Definiert in Header <ostream> |
||
| template< class... Args > void print( std::ostream& os, std::format_string<Args...> fmt, Args&&... args ); |
(seit C++23) | |
Formatiert args gemäß der Formatzeichenkette fmt und fügt das Ergebnis in den Stream os ein.
Wenn die gewöhnliche Literalcodierung UTF-8 ist, entspricht dies
- std::vprint_unicode(os, fmt.get(), std::make_format_args(args...));. Andernfalls
- std::vprint_nonunicode(os, fmt.get(), std::make_format_args(args...));.
Das Verhalten ist undefiniert, wenn std::formatter<Ti, char> die BasicFormatter-Anforderungen für irgendein Ti in Args nicht erfüllt (wie von std::make_format_args gefordert).
Inhalt |
[edit] Parameter
| os | - | Ausgabestream, in den Daten eingefügt werden sollen | ||||||||||||||||||||||||||||||||||||||||||||||
| fmt | - |
Jedes Ersetzungsfeld hat das folgende Format:
1) Ersetzungsfeld ohne Formatangabe
2) Ersetzungsfeld mit Formatangabe
| ||||||||||||||||||||||||||||||||||||||||||||||
| args... | - | zu formatierende Argumente | ||||||||||||||||||||||||||||||||||||||||||||||
[edit] Ausnahmen
- std::bad_alloc bei Zuweisungsfehler.
- Leitet jede Ausnahme, die von einem beliebigen Formatter ausgelöst wird, z. B. std::format_error, ohne Berücksichtigung des Werts von os.exceptions() und ohne ios_base::badbit im Fehlerzustand von os zu aktivieren, weiter.
- Kann ios_base::failure auslösen, die durch os.setstate(ios_base::badbit) verursacht wird, was aufgerufen wird, wenn ein Einfügen in os fehlschlägt.
[edit] Hinweise
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_print |
202207L |
(C++23) | Formatierte Ausgabe |
__cpp_lib_format |
202207L |
(C++23) | Freigabe von std::basic_format_string |
[edit] Beispiel
Führen Sie diesen Code aus
#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{}; for (auto n : buf | std::views::filter(isdigit) | std::views::transform([](char x) { return x - '0'; }) | std::views::take_while([&sum](char) { return sum < 42; })) sum += n, ++num; std::stringstream stream; #ifdef __cpp_lib_print std::print(stream, #else stream << std::format( #endif "√2 \N{ALMOST EQUAL TO} {0}.\n" "The sum of its first {1} digits is {2}.", std::numbers::sqrt2, num, sum ); std::puts(stream.str().data()); }
Ausgabe
√2 ≈ 1.4142135623730951. The sum of its first 13 digits is 42.
[edit] Siehe auch
| (C++23) |
gibt die formatierten Darstellung der Argumente mit angehängtem '\n' aus (Funktions-Template) |
| (C++23) |
druckt nach stdout oder einem Dateistream unter Verwendung der formatierten Darstellung der Argumente (Funktionstemplate) |
| (C++20) |
speichert die formatierte Darstellung der Argumente in einem neuen String (Funktionstemplate) |