Abseil - C++ 常用库
仓库包含 Abseil C++ 库代码。Abseil 是一套开放的 C++ 代码集合(符合 C++14),旨在增强 C++ 标准库。
目录
关于 Abseil
Abseil 是一套开放的 C++ 库代码集合,旨在增强 C++ 标准库。Abseil 库代码源自谷歌自己的 C++ 代码库,经过广泛测试并在生产中使用,这是我们日常编码生活中所依赖的相同代码。
在某些情况下,Abseil 补充了 C++ 标准中缺失的部分;在其他情况下,Abseil 提供了特殊的替代方案以满足我们在 Google 代码库中使用中发现的需求。我们将在提供的库代码中明确指出这些情况。
Abseil 并非旨在成为标准库的竞争对手;我们只是发现许多这些实用工具在我们的代码库中很有用,现在我们希望将它们作为资源提供给整个 C++ 社区。
快速入门
如果您想开始使用,请确保至少运行一下 Abseil 快速入门。快速入门包含有关设置您的开发环境、下载 Abseil 代码、运行测试以及使一个简单的二进制文件工作等信息。
构建 Abseil
Bazel 和 CMake 是 Abseil 的官方构建系统。有关使用 Bazel 构建系统的更多信息,请参阅 快速入门。如果您需要 CMake 支持,请查看 CMake 构建说明 和 CMake 快速入门。
支持
Abseil 遵循 Google 的 基础 C++ 支持策略。有关目前支持的道路编译器、平台和构建工具的列表,请参阅 此表。
码映射
Abseil 包含以下 C++ 库组件
basebase库包含初始化代码和其他所有 Abseil 代码所依赖的代码。在base中的代码可能不依赖任何其他代码(除了 C++ 标准库)。algorithmalgorithm库包含了 C++<algorithm>库的扩展以及基于容器的此类算法的版本。cleanupcleanup库包含类似控制流结构的类型absl::Cleanup,用于作用域退出时执行回调。containercontainer库包含额外的 STL 风格容器,包括 Abseil 的无序 "瑞士表" 容器。crccrc库包含用于在数据上计算错误检测循环冗余校验的代码。debuggingdebugging库包含用于启用内存泄漏检查、堆栈跟踪和符号化工具的代码。flagsflags库包含处理使用 Abseil 构建的库和二进制文件的命令行标志的代码。hashhash库包含哈希框架和 Abseil 中可哈希类型的默认哈希算子实现。iteratoriterator库包含用于增强基于范围的 for 循环的实用工具。loglog库包含LOG和CHECK宏以及将日志消息写入磁盘、stderr或用户可扩展目的地的工具。memorymemory库包含增强 C++ 的<memory>库的内存管理功能。metameta库包含与 C++14 和 C++17 版本的 C++<type_traits>库中的类型检查相兼容的版本。numericnumeric库包含 128 位整数类型以及 C++20 的位运算函数的实现。profilingprofiling库包含用于性能分析的实用代码。它目前是其他 Abseil 库的私有依赖。randomrandom库包含生成伪随机值的功能。statusstatus库包含错误处理的抽象,特别是absl::Status和absl::StatusOr<T>。stringsstrings库包含各种字符串函数和实用工具,包括与 C++17 的std::string_view类型兼容的 C++14 版本。synchronizationsynchronization库包含并发原语(Abseil 的absl::Mutex类,是std::mutex的替代品)以及多种同步抽象层。timetime库包含用于计算绝对时间点、时间间隔以及在不同时区内格式化和解析时间的抽象。typestypes库包含非容器实用类型,如与 C++17 的std::optional类型兼容的 C++14 版本。utilityutility库包含实用和辅助代码。
发布版本
Abseil 推荐用户采用“实时跟踪头部”的策略(尽可能频繁地将主分支的最新提交更新到本地)。然而,我们也意识到这种策略并不适用于所有项目,因此我们还提供长期的支持版本,我们将严重错误的修复回滚到这些版本。更多详细信息,请参阅我们的版本管理文档。
许可证
Abseil C++ 库根据 Apache 许可证的条款进行授权。更多信息请参阅LICENSE。
链接
有关 Abseil 的更多信息
- 参阅我们的Abseil 简介
- 通过为何选择 Abseil 了解我们的设计理念。
- 参阅我们的Abseil 兼容性保证 了解我们向您承诺的内容以及我们对您的期望。