std::print(std::ostream)
来自 cppreference.com
< cpp | io | basic ostream
在头文件 <ostream> 中定义 |
||
template< class... Args > void print( std::ostream& os, std::format_string<Args...> fmt, Args&&... args ); |
(自 C++23 起) | |
根据格式字符串 fmt 格式化 args,并将结果插入 os 流中。
如果 普通字面量编码 为 UTF-8,则等效于
- std::vprint_unicode(os, fmt.get(), std::make_format_args(args...));. 否则,
- std::vprint_nonunicode(os, fmt.get(), std::make_format_args(args...));.
如果 std::formatter<Ti, char> 不满足 BasicFormatter 要求(如 std::make_format_args 所需)的任何 Ti
,则行为未定义。
内容 |
[编辑] 参数
os | - | 要将数据插入的输出流 | ||||||||||||||||||||||||||||||||||||||||||||||
fmt | - |
每个替换字段都具有以下格式
1) 没有格式规范的替换字段
2) 带有格式规范的替换字段
| ||||||||||||||||||||||||||||||||||||||||||||||
args... | - | 要格式化的参数 |
[编辑] 返回值
(无)
[编辑] 异常
- 在分配失败时抛出 std::bad_alloc。
- 传播任何由 formatter 抛出的异常,例如 std::format_error,而不考虑 os.exceptions() 的值,也不在 os 的错误状态中打开 ios_base::badbit。
- 可能抛出由 os.setstate(ios_base::badbit) 引起的 ios_base::failure,如果对 os 的插入失败,则会调用该函数。
[编辑] 注释
功能测试 宏 | 值 | Std | 功能 |
---|---|---|---|
__cpp_lib_print |
202207L | (C++23) | 格式化输出 |
__cpp_lib_format |
202207L | (C++23) | 公开 std::basic_format_string |
[编辑] 示例
运行此代码
#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()); }
输出
√2 = 1.4142135623730951... The sum of its first 13 digits is 42.
[编辑] 参见
(C++23) |
输出格式化后的参数表示形式,并在末尾追加'\n' (函数模板) |
(C++23) |
使用格式化后的参数表示形式,打印到stdout 或文件流 (函数模板) |
(C++20) |
将格式化后的参数表示形式存储到一个新的字符串中 (函数模板) |