目标读者:所有考虑过C的程序员
1.目的:这篇文档的目的是帮助大家理解现代C++(当前的C++17)以及在众多编程平台达到一个更统一的形式。
我们不能下结论这些规则可以有效的适用所有编程平台。但是,我们相信一个工程使用这个规则更不容易出错,会更快、更简洁,比传统的更好。在了解时要记住以下几点:
2.不要恐慌
在你的项目中理解这篇指导文件。
设计这份指导文件参考了"subset of superset"准则(Stroustrup05)。他们不仅仅是定义了C++的一个更可靠安全的子集,也介绍了一些简单的导致C++出现冗余错误的“扩展”(library components),在我们这套规则中我们可以禁止这些“扩展”。
这个规则强调了固定模式的安全性和来源的安全性。因为这个原因,他们强调了在一定范围内检查的可能性,为了避免解除空指针,避免悬挂指针,系统性的使用exceptions (via RAII)。一方面是为了达到这个目的另一方面还可以减少代码来源的错误,这个规则强调简洁以及把必要的复杂模块隐藏在简洁的表面模块后面。
许多规则带有指定性。我们希望规则不要去要求“不要这么做”,而是去提供一个选择。这样做造成的一个后果是:一些规则只能仅仅被heuristics支持,而不是精准的被检查。其他的规则是一般化的明确的原则。其他的规则需要更多的细节才能检查一部分内容。
这份指导文件利用了C++的核心。我们期望达到更大的组成部分,更明确的应用区域,越大的项目需要更多的规则、限制、支持库。例如,hard-real-time项目不能免费使用free store (dynamic memory)以及会被选择的库限制。我们鼓励更多类似的明确的规则作为附录添加到这份指导文件里。建立你自己的小库并使用,而不是减少你已经汇编好的代码。
这个规则希望被大家逐渐的采纳。
这份指导文件一些规则试图用各种各样形式的措施增加安全性,而其他的规则是降低事件发生的可能性,有一些规则是两者都做。这份指导文件致力于防止事件通常会禁止合法的C++。当有两种方式可以表达同一个思想,其中一种可以展示出错误的来源而另一种不可以,我们想实现第二种。



