C++如何计算普通类型的 Hash 值:基于 gcc/clang 源码分析
当 int/long/float/指针/std::string 作为 std::unordered_map
的 key 时,C++底层是如何计算 hash 值的?
gcc/clang 作为使用最多的两种编译器和标准库,它们在这个问题的实现上略有差异。本文将基于二者的源码进行对比分析。
当 int/long/float/指针/std::string 作为 std::unordered_map
的 key 时,C++底层是如何计算 hash 值的?
gcc/clang 作为使用最多的两种编译器和标准库,它们在这个问题的实现上略有差异。本文将基于二者的源码进行对比分析。
2025-08-20 期
我的博客之前多以技术文章为主(虽然现在基本是年更了),很少有自我表达的部分。主要我认为我的想法并不独特到可以分享出来让大家看到。
但最近一段时间看到一些观点,让我决定做出一些改变。
C++17 中引入了 std::any
,可以非常方便地将任意类型的变量放到其中,做到安全的类型擦除。然而万物皆有代价,这种灵活性背后必然伴随着性能取舍。
std::any 的实现本身也并不复杂,本文将基于 libstd++ 标准库源码 深入解析其实现机制与性能开销。
我们在使用 C++ 的时候,有时会需要在类的内部获取自身的 shared_ptr,这就会用到 std::enable_shared_from_this
。在实际使用过程中,std::enable_shared_from_this
有三个陷阱需要注意:
我们有这么一段业务代码,在 Gin 的 API Handler 中,开了一个子 goroutine 写 DB,代码大概是这样: