fmt 库的 output_file 的诡异行为

作者: , 共 443 字 , 共阅读 0

C++的fmt::format格式化库,由于效率高,功能强大,相关的 API 已经进入C++20,但其文档和 API 细节无法恭维。

比如下面这段代码来自 https://github.com/fmtlib/fmt,号称速度比fprintf要快 5 到 10 倍:

int main() {
  auto out = fmt::output_file("guide.txt");
  out.print("Don't {}", "Panic");
}

猜猜如果guide.txt里面有内容时会发生什么,删除文件重写还是续写?都不是,答案是从头开始覆盖写入。这意味着,如果文件原内容比要写的内容更长,文件就变成写入内容,再加上原内容剩下部分。

是不是很奇葩呀?关键是你在官方文档里还找不到output_file的任何信息( 2020 年 11 月 02 日)。在源代码里也没有该函数的帮助信息(只能看源实现代码)。

Q. E. D.

类似文章:
获取程序占用的内存量,是一个诡异的需求。但程序写多了,有时候还真需要,尤其是代码运行出现问题的时候。
std::thread是 C++ 11 新引入的标准线程库。在同样是 C++ 11 新引入的 lambda 函数的辅助下,std::thread用起来特别方便:
上篇文章已经提到, P vs NP 是理论计算机科学的核心问题。从数学的角度来说,它和其他历史上有名的数学问题一样,给与人们一个智力上重大的挑战。而更为重要的是,在无数与计算有关的的学术领域中, NP-完全问题以各种不同形式层出不穷。因此,这并不是一个纯粹的与世独立的智力游戏,而是对计算机科学有全面影响力的问题。
Excel 的数据透视表是一个很好用的功能,我写了一个 Matlab 版本,在处理上和 Excel 的透视表差不多,还差一个 filter 而已。
相似度: 0.054
编程 » C++, GCC, 编译
C++的链接分为两部分,一个是编译时,一个是运行时。但运行时的行为也收到编译参数的影响。
编程 »
一个典型的 GCC C++编译过程为:
编程 » C++
现在一般不能用 sprintf 和 strcpy ,推荐使用 snprintf 和 strncpy ,以防止缓冲区溢出: