#C++ fmt# C++字符串格式化 fmt库
共 2982字,需浏览 6分钟
·
2024-04-12 00:39
Fmt简介
fmt(即 "fast {format}")是一个用于 C++ 的现代、快速、类型安全的格式化库。它的目标是提供简单易用的 API,同时保持出色的性能和安全性。
Fmt特性
-简单易用:fmt 库提供了直观的 API,易于学习和使用。它支持类似于 Python 的格式化字符串语法,可以方便地进行字符串格式化。
-类型安全:fmt 库是类型安全的,可以确保格式化字符串和参数类型的匹配,避免了常见的格式化错误。
-高性能:fmt 库具有出色的性能,通常比标准库提供的格式化功能更快。它采用了一些高效的技术来提高格式化速度,如预分配缓冲区和内存复用。
-可扩展性:fmt 库支持自定义格式化器,可以轻松地扩展和定制格式化功能,以满足特定需求。
-跨平台:fmt 库是跨平台的,可以在各种操作系统和编译器上运行,包括 Windows、Linux、macOS 等。
Fmt与std::string直接拼接对比
通常情况下,使用 fmt 库进行格式化输出比直接使用 std::string 进行拼接更高效。这是因为 fmt 库经过了优化,并且采用了一些技术来提高性能,如预分配缓冲区、内存复用等。而直接使用 std::string 进行拼接可能会导致频繁的内存分配和拷贝操作,从而降低了效率。
另外,fmt 库还提供了类型安全的格式化功能,可以确保格式化字符串和参数类型的匹配,避免了常见的格式化错误。
因此,如果您关注性能和代码的简洁性,推荐使用 fmt 库进行格式化输出。不过,对于简单的拼接操作,直接使用 std::string 也可能足够快速,并且更易读易懂。最佳实践是根据具体情况选择合适的方法。
Fmt资料
github:
https://github.com/fmtlib/fmt
api指南:
https://fmt.dev/latest/api.html
Fmt使用
方案1:CMake编译
Centos上编译fmt
#安装git
yum -y install git
#下载fmt
git clone https://github.com/fmtlib/fmt.git
#创建构建目录并进入:在克隆的 fmt 目录外创建一个构建目录,并进入该目录
mkdir fmt/build
cd fmt/build
#运行CMake:在构建目录中运行 CMake 来配置编译过程
cmake ..
#编译和安装:运行 make 命令进行编译,然后使用 make install 命令安装 fmt 库到指定目录
make
make install
#确认安装:安装完成后,您可以通过检查安装目录下的文件来确认 fmt 库是否成功安装。通常情况下,库文件会安装到 /usr/local/lib 目录下,头文件会安装到 /usr/local/include 目录下。
#库文件目录
ls /usr/local/lib
ls /usr/local/lib64
#头文件目录
ls /usr/local/include
编辑测试代码:
#include "fmt/core.h"
#include <string>
int main()
{
// {} 占位符,可以占位int float double ....
std::string world = fmt::format("Hello {}", "World");
fmt::print("{}", world);
}
方案2:将编译好的静态库文件及头文件放置项目目录
编辑测试代码:
#include "fmt/core.h"
#include <string>
int main()
{
// {} 占位符,可以占位int float double ....
std::string world = fmt::format("Hello {}", "World");
fmt::print("{}", world);
}
方案3:引用头部文件
将下载的头文件夹放置到项目目录下
#define FMT_HEADER_ONLY
#include "fmt/core.h"
#include <string>
int main()
{
// {} 占位符,可以占位int float double ....
std::string world = fmt::format("Hello {}", "World");
fmt::print("{}", world);
}
fmt教程
fmt相关头文件说明:
仅仅包含头文件,(需要在包含头文件之前#define FMT_HEADER_ONLY 推荐)
fmt/core.h:char/UTF-8主要的格式化函数,支持C++20编译时检查,依赖最小化。
fmt/format.h:完整的格式化API,除了额外的格式化函数之外,支持本地化(多语言支持)。
fmt/ranges.h:格式化ranges 和 tuples
fmt/chrono.h:日期和时间的格式化。
fmt/std.h:c++标准库类型的格式化支持。
fmt/compile.h:格式化字符串的编译 (编译时格式化字符串检测)。FMT_STRING(s)
fmt/color.h:终端颜色和文本样式。
fmt/os.h:提供系统API。
fmt/ostream.h:支持std::ostream。
fmt/printf.h:支持printf格式化。
fmt/xchar.h:可选的wchar_t支持。
参考资料:
c++ {fmt}库使用指南一_c++ fmt-CSDN博客
https://blog.csdn.net/qq_33944628/article/details/129943438