引言

C++标准流输出std::cout一直以来为人们所诟病:不灵活,格式化支持差,冗长等等。人们有此想法源于C库的printf()函数虽然不提供类型安全保障和线程安全保障,但它非常灵活,格式化支持非常好。

为此,C++23版本引入了std::print()/std::println()函数,完全解决了流输出std::cout为人们所诟病的问题。下面我们就来看看它们。

介绍

下面是来自cppreference.com关于std::print()的介绍:
支持 Unicode 编码的std::print系列函数可对已格式化的文本执行格式化 I/O。它们具有 std::format 的所有性能优势,默认情况下与语言环境无关,减少全局状态,避免分配临时 std::string 对象和调用运算符 <<,并且与 iostreams 和 stdio 相比,通常使格式化更高效。

头文件

std::print()系列函数定义在头文件<print>中,使用之前需要包括进去。

#include <print>

用法

std::print()为模版函数,其原型:

template<class... Args>
  void print(format_string<Args...> fmt, Args&&... args);

第一个参数是格式化字符串,格式化后面要打印的参数。
第二个是一包参数,个数可变,即要打印的数据。

用例

#include <print>

int main()
{
    std::print("Hello world!");

    return 0;
}

Output:
Hello world!
#include <print>

int main()
{
    std::print("{0} {2}{}", "Hello", 23, "C++");

    return 0;
}

Output:
Hello C++23
#include <print>
#include <string>

int main()
{
    std::string name { "Alan" };

    std::print("Hello {0:*>10}", name);

    return 0;
}

Output:
Hello ******Alan

附注

鉴于是新特性,目前GCC编译器必须是版本14.1.0及以上的版本才支持std::print()系列函数,并且编译选项必须指定为-std=c++23。


Alan王伦胜
1 声望0 粉丝