"在c++内部是一种更小、更简单、更安全的语言。" -- 本贾尼·斯特劳斯特卢普
C++核心指南 像C++一样是在本贾尼·斯特劳斯特卢普的领导下共同努力的成果,也是是多个组织进行多年讨论和设计的成果。它们的设计鼓励通用性和广泛采用,但是可以自由地复制和修改它们,以满足组织的需要。
这些指南可以在CppCoreGuidelines中找到,该文档使用GH风格的MarkDown。该指南刻意保持简单,主要使用ASCII以便允许自动化后处理,如语言翻译和重新格式化。编者们维护了一个用于浏览格式的版本,由于它是手工集成的,所以可能比主分支中的版本稍微老一些。
该指南是一个不断发展的文档,没有严格的“发布”节奏,本贾尼·斯特劳斯特卢普会定期审查该文档以及在介绍中增加版本号,并在git中标出了增长版本号的签入 。
很多指南使用了仅含有头文件的“指南支持库”,GSL:指南支持库是其中一个可用的实现。
该指南的目的是帮助人们有效地使用现代C++。“现代C++”指的是c++11、c++14和c++17。换句话说,您希望5年后您的代码是什么样子的?10年后呢?现在开始吧。
该指南聚焦于相对高层次的问题,例如接口,资源管理,内存管理以及并发等,这些规则影响于应用架构和库的设计,相对于现今常用的规范,使用这些规则可以让代码静态类型安全,无资源泄漏,捕获更多的编程逻辑错误,并且可以让代码运行的更快,总之,值得您去做这些事情。
我们不太关注底层问题,如命名规范和对齐风格。然而,无用的废话是越线的。
我们最初的规则集合强化的安全性(多种形式)和简洁性,它们可以会太严格,希望没有引入更多的异常来适应现实的需求,但我们需要更多的规则。
您将会发现一些规则会违背您的预期,甚至违背您过往经历,如果我们不能用任何方式说服您改变您的编程风格,那么我们就失败了!请尝试来验证或否定这些规则。我们尤其希望能有一些测试或更好的案例来支持我们的规则。
您也发现一些明显的甚至琐碎的规则,请记住我们指南的目的是为了帮助那些缺乏经验的,其它语言转移过来的,或者需要来提升该语言的人。
大多的规则被设计成可以被分析工具来支持,违反的规则被标记出(链接)到相应的规则。我们不希望您在写代码之前记住所有的规则,一种理解是可以把该文档当成碰巧可以被阅读的(分析)工具的说明书。
这些规则用于逐步引入代码库,我们计划为此开发工具,并希望其他人也能这样做。
欢迎对改进提出意见和建议,随着我们对该文档的理解提高,以及语言和可用库集的改进,我们计划修改和扩展该文档。更多细节参见贡献 和LICENSE。