“在 C++ 中,有一个更小、更简单、更安全但努力挣扎着表现出来的语言。” – Bjarne Stroustrup
《C++ Core Guidelines》是 Bjarne Stroustrup 主导的一项协作成果,就像 C++ 语言本身一样。它们是许多组织经过多年讨论和设计的结果。其设计鼓励通用性和广泛采用,但您可以自由复制和修改以满足您组织的需求。
指南本身可以在 CppCoreGuidelines 找到。该文档采用 GH-flavored MarkDown 格式。它被故意保持简单,大部分是 ASCII 文本,以便进行自动后处理,例如语言翻译和重新格式化。编辑者维护了一个 便于浏览的格式版本。请注意,它是手动整合的,可能比 master 分支中的版本稍旧。
Guidelines 是一个不断发展的文档,没有严格的“发布”周期。Bjarne Stroustrup 会定期审查文档并在引言中更新版本号。在 git 中标记了会增加版本号的 提交记录。
许多指南都使用了仅包含头文件的 Guidelines Support Library。一个实现可以在 GSL: Guidelines Support Library 中找到。
指南的目的是帮助人们有效地使用现代 C++。“现代 C++”意味着 C++11 及更高版本。换句话说,考虑到您现在就可以开始,您希望 5 年后您的代码是什么样子?10 年后呢?
指南侧重于相对更高级别的问题,例如接口、资源管理、内存管理和并发。这些规则会影响应用程序架构和库设计。遵循这些规则将有助于编写静态类型安全、无资源泄漏的代码,并能捕获比当前代码更常见的许多编程逻辑错误。而且它运行速度很快——您可以负担得起正确做事。
我们不太关注低级别问题,例如命名约定和缩进风格。但是,任何能帮助程序员的话题都在讨论范围之内。
我们最初的一套规则强调安全性(各种形式)和简洁性。它们可能过于严格。我们预计需要引入更多例外情况,以更好地适应现实世界的需要。我们还需要更多的规则。
您会发现其中一些规则与您的期望相悖,甚至与您的经验相悖。如果我们没有建议您以任何方式改变您的编码风格,我们就失败了!请尝试验证或证伪规则!特别是,我们非常希望用测量数据或更好的示例来支持我们的一些规则。
您会发现其中一些规则是显而易见的,甚至是微不足道的。请记住,指南的一个目的是帮助那些经验较少或来自不同背景或语言的人快速上手。
规则旨在由分析工具支持。规则的违规将通过引用(或链接)到相关规则来标记。我们不期望您在尝试编写代码之前就记住所有规则。
这些规则旨在逐步引入代码库。我们计划构建相应的工具,并希望其他人也能这样做。
我们非常欢迎改进的评论和建议。随着我们理解的提高以及语言和可用库集的发展,我们计划修改和扩展本文档。更多详细信息请参阅 CONTRIBUTING 和 LICENSE。
感谢 DigitalOcean 托管 Standard C++ Foundation 网站。