"C++语言中有一个更小、更简单、更安全的语言在努力呼之欲出。" -- 比雅尼·斯特劳斯特鲁普
C++ 核心指南是由比雅尼·斯特劳斯特鲁普领导的一项协作努力,很像C++语言本身。它们是多个组织经过多年讨论和设计的结果。它们的设计鼓励通用性和广泛采用,但您可以自由复制和修改以满足您组织的需求。
入门
指南本身可在CppCoreGuidelines找到。该文档采用GitHub风格的Markdown格式。它被故意保持简单,主要使用ASCII,以允许自动后处理,如语言翻译和重新格式化。编辑维护了一个用于浏览的格式版本。请注意,它是手动集成的,可能比主分支的版本稍旧。
指南是一个不断演进的文档,没有严格的"发布"节奏。比雅尼·斯特劳斯特鲁普定期审查文档并递增介绍中的版本号。递增版本号的提交在git中被标记。
许多指南使用仅头文件的指南支持库。一个实现可在GSL:指南支持库找到。
背景和范围
指南的目的是帮助人们有效地使用现代C++。我们所说的"现代C++"是指C++11及更新版本。换句话说,如果您现在就可以开始,您希望5年后您的代码是什么样子?10年后呢?
指南主要关注相对较高级的问题,如接口、资源管理、内存管理和并发。这些规则影响应用程序架构和库设计。遵循这些规则将导致静态类型安全、没有资源泄漏,并且比当今常见的代码捕获更多的编程逻辑错误。而且它将运行得很快——您可以负担得起正确地做事。
我们较少关注低级问题,如命名约定和缩进风格。然而,任何能帮助程序员的主题都不会被排除在外。
我们的初始规则集强调安全性(各种形式)和简单性。它们可能太过严格。我们预计需要引入更多例外来更好地适应现实世界的需求。我们还需要更多规则。
您会发现一些规则与您的预期相反,甚至与您的经验相反。如果我们没有建议您以任何方式改变编码风格,那我们就失败了!请尝试验证或反驳规则!特别是,我们真的希望用测量或更好的例子来支持我们的一些规则。
您会发现一些规则显而易见甚至琐碎。请记住,指南的一个目的是帮助经验较少或来自不同背景或语言的人快速上手。
这些规则旨在得到分析工具的支持。违反规则将被标记,并附有相关规则的参考(或链接)。我们不期望您在尝试编写代码之前就记住所有规则。
这些规则旨在逐步引入代码库。我们计划为此构建工具,并希望其他人也会这样做。
贡献和许可证
我们非常欢迎评论和改进建议。随着我们对语言的理解的提高以及可用库集的改进,我们计划修改和扩展本文档。更多详情请参见CONTRIBUTING和LICENSE。
感谢DigitalOcean托管Standard C++ Foundation网站。