#C++ fmt# C++字符串格式化 fmt庫
Fmt簡介
fmt(即 "fast {format}")是一個用于 C++ 的現(xiàn)代、快速、類型安全的格式化庫。它的目標是提供簡單易用的 API,同時保持出色的性能和安全性。
Fmt特性
-簡單易用:fmt 庫提供了直觀的 API,易于學習和使用。它支持類似于 Python 的格式化字符串語法,可以方便地進行字符串格式化。
-類型安全:fmt 庫是類型安全的,可以確保格式化字符串和參數(shù)類型的匹配,避免了常見的格式化錯誤。
-高性能:fmt 庫具有出色的性能,通常比標準庫提供的格式化功能更快。它采用了一些高效的技術來提高格式化速度,如預分配緩沖區(qū)和內(nèi)存復用。
-可擴展性:fmt 庫支持自定義格式化器,可以輕松地擴展和定制格式化功能,以滿足特定需求。
-跨平臺:fmt 庫是跨平臺的,可以在各種操作系統(tǒng)和編譯器上運行,包括 Windows、Linux、macOS 等。
Fmt與std::string直接拼接對比
通常情況下,使用 fmt 庫進行格式化輸出比直接使用 std::string 進行拼接更高效。這是因為 fmt 庫經(jīng)過了優(yōu)化,并且采用了一些技術來提高性能,如預分配緩沖區(qū)、內(nèi)存復用等。而直接使用 std::string 進行拼接可能會導致頻繁的內(nèi)存分配和拷貝操作,從而降低了效率。
另外,fmt 庫還提供了類型安全的格式化功能,可以確保格式化字符串和參數(shù)類型的匹配,避免了常見的格式化錯誤。
因此,如果您關注性能和代碼的簡潔性,推薦使用 fmt 庫進行格式化輸出。不過,對于簡單的拼接操作,直接使用 std::string 也可能足夠快速,并且更易讀易懂。最佳實踐是根據(jù)具體情況選擇合適的方法。
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
#創(chuàng)建構建目錄并進入:在克隆的 fmt 目錄外創(chuàng)建一個構建目錄,并進入該目錄
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:將編譯好的靜態(tài)庫文件及頭文件放置項目目錄

編輯測試代碼:
#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主要的格式化函數(shù),支持C++20編譯時檢查,依賴最小化。
fmt/format.h:完整的格式化API,除了額外的格式化函數(shù)之外,支持本地化(多語言支持)。
fmt/ranges.h:格式化ranges 和 tuples
fmt/chrono.h:日期和時間的格式化。
fmt/std.h:c++標準庫類型的格式化支持。
fmt/compile.h:格式化字符串的編譯 (編譯時格式化字符串檢測)。FMT_STRING(s)
fmt/color.h:終端顏色和文本樣式。
fmt/os.h:提供系統(tǒng)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
