Skip to content
败犬日报 2025-12-22

败犬日报 2025-12-22

1. stringstream 比 string 的追加写慢

为什么 std::ostringstream 性能不好? 这里写了多线程场景 std::locale 会对全局共享变量进行访问,产生了 false sharing。不过评论区说新版编译器优化了。

考虑到 stream 设计一言难尽,还是更推荐 string。

2. Performance Hints - Jeff Dean(文章)

https://abseil.io/fast/hints.html

3. 为什么不建议过早优化

老生常谈了,因为性能是破坏可读性的一大因素。

最理想的是程序员清楚自己的代码会有多少开销,避开性能上的坑,确保花精力的地方就是性能热点。但是这样的程序员太珍贵了。

其次就是优先保证可读性,分析热点时再优化。这也是日报一直说的可读性优先。

4. 任何时候都应该用迭代器吗

当然不是,碰到迭代器失效就老实了。

而且下标简洁太多了。

5. ranges 的优势是什么

ranges 最大的优势是不容易犯错,“范围”变成了一个对象。自己实现不用说,最容易写错。传统的 STL 要写很多 begin() end() 表达“范围”,也容易出问题。

可读性一定程度上有改善,但是滥用也会成为 💩 山。