print("Hello World!");
什么?这不是 Python,这是一个 C++ 23 的 print
继 C++ 20 引入了 std::format 之后,C++ 23 又引入了 print。std::print 的功能依旧与 fmt::print 的类似(参见std::print - cppreference.com和Overview — fmt 10.1.0 documentation)
到目前为止以下代码已经可以在最新版 MSVC 通过/std:c++latest 参数编译(gcc 13.2.1 和 clang 16.0.6 暂未通过测试)
#include <print>
int main(){
std::print("Hello World!\n");
}
什么?你说这和 printf 看着没区别?好吧,上述代码确实直接把print
改为printf
之后依旧可以实现相同功能
那么我们来看看 print 的真正用法
与 Python 的 print 不同,std::print 或者 fmt::print 更像是输出 format 后的内容
来看看 print 的定义:
template< class... Args >
void print( std::FILE* stream,
std::format_string<Args...> fmt, Args&&... args );
template< class... Args >
void print( std::format_string<Args...> fmt, Args&&... args );
在 cppreference 中,对 print 函数的描述为”根据格式字符串 fmt
格式化 args
,并将结果打印到流中。“
听起来有点绕,那来看个例子(摘自 cppreference)
#include <cstdio>
#include <filesystem>
#include <print>
int main()
{
std::print("{0} {2}{1}!\n", "Hello", 23, "C++"); // overload (1)
if (std::FILE* stream {std::fopen("test.txt", "w")})
{
std::print(stream, "File: {}", "test.txt"); // overload (2)
std::fclose(stream);
}
}
以上代码的终端输出为
Hello C++23!
同时,该程序会生成一个名为”test.txt“的文件,内容为
File: test.txt
相信在未来,std::print 将会改变 std::cout 的垄断局面,C++ 23 标准的提出也将会是对于 C++语言的一次大变革,无论是好是坏,终究是多了一种选择
至于最后结果如何,那让我们拭目以待吧~