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 起)

args 填充格式字符串 fmt, 将结果写入输出流 os

如果 通常字面量编码 是 UTF-8, 上式等价于:
std::vprint_unicode(os, fmt.get(), std::make_format_args(std::forward<Args>(args)...));

否则等价于:

std::vprint_nonunicode(os, fmt.get(), std::make_format_args(std::forward<Args>(args)...));

Args 中有一 Ti,其 std::formatter<Ti, char> 不满足 基本格式化器 (BasicFormatter) 要求,则行为未定义(正如 std::make_format_args 所要求的)

参数

os - 数据输出流
fmt - 表示格式字符串的字符串视图。格式字符串由以下内容组成:
  • 通常字符(除了 {} ),它们被不加修改地复制到输出,
  • 转义序列 {{}} ,它们在输出中被分别替换成 {} ,以及
  • 替换域。

每个替换域拥有下列格式:

  • 引入的 { 字符;
  • (可选) arg-id ,一个非负数;
  • (可选) 冒号( : )后随格式说明;
  • 终止的 } 字符。

arg-id 指定用于格式化其值的 args 中的参数的下标;若省略 arg-id ,则按顺序使用参数。格式字符串中的 arg-id 必须全部存在或全部被省略。混合手动和自动指定下标是错误。

格式说明由对应参数特化的 std::formatter 定义。

  • 对于基本类型和标准字符串类型,格式说明为标准格式说明
  • 对于标准日期和时间类型,格式说明为 chrono 格式说明
  • 对于用户定义类型,格式说明由用户定义的 std::formatter 特化决定。
args... - 参与格式化的参数

返回值

(无)

异常

Template:std print ostream exceptions

注解

功能特性测试 标准 注释
__cpp_lib_print 202207L (C++23) 格式化输出
__cpp_lib_format 202207L (C++23) 暴露 std::basic_format_string

示例

测试链接: Compiler Explorer

#include <array>
#include <cctype>
#include <format>
#include <ranges>
#include <numbers>
#include <iostream>
 
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;
    }
 
#ifdef __cpp_lib_print
    std::print(
        std::cout,
        "√2 = {}...\n"
        "其前 {} 位的和是 {}{}\n",
        std::numbers::sqrt2, num, sum, '.'
    );
#else
    std::cout <<
    std::format(
        "√2 = {}...\n"
        "其前 {} 位的和是 {}{}\n",
        std::numbers::sqrt2, num, sum, '.'
    );
#endif
}

输出:

√2 = 1.4142135623730951...
其前 13 位的和是 42.

参阅

Template:cpp/io/basic ostream/dsc println
(C++23)
将参数的 格式化 表达输出到 stdout 或文件缓冲区
(函数模板)
(C++20)
在新 string 中存储参数的格式化表示
(函数模板)