c++核心指南--导论

    科技2022-08-07  99

    In: 导论

    这是一套现代C++(目前是C++17)的核心指南,考虑了未来可能的增强和国际标准化组织技术规范(TSs)。 目的是帮助C++程序员编写更简单、更高效、更易维护的代码。

    导论摘要:

    In.target: Target readershipIn.aims: AimsIn.not: Non-aimsIn.force: EnforcementIn.struct: The structure of this documentIn.sec: Major sections

    In.target: 目标读者

    所有C++程序员。这包括可能会考虑c的程序员。

    In.aims: 目标

    本文的目的是帮助开发人员采用现代C++(目前是C++17),并实现更统一的跨代码库风格。

    我们不会妄想这些规则中的每一条都可以有效地应用于每个代码库. 升级旧系统很难. 然而,我们确信,使用规则的程序比不使用规则的程序更不容易出错,也更容易维护。 通常,规则会使开发的初始阶段更快、更容易。 就我们所知,这些规则使代码的性能与采用旧的、更传统的技术的代码一样好或更好;这些规则会遵循零开销原则 (即"你无需为不用的东西付费" 或者说 “当您恰当地使用抽象机制时, 您至少可以获得与使用低级语言结构手工编码一样好的性能”).

    将这些规则的思想用于新代码,同时在处理旧代码时找机会利用它们,并尽可能接近这些思想。 Remember:

    In.0: 不要慌!

    花点时间去理解一份指导原则对你的程序的影响。 这些指南是根据“超集子集”原则设计的 (Stroustrup05). 他们并不是简单地定义要使用的C++子集 ((可靠性、安全性、性能或其他). 而是, 强烈建议使用一些简单的“扩展”,这些“扩展”使得C++最容易出错的特性的使用变得多余,从而可以被禁止(在我们的规则集中)。

    这些规则以静态类型安全和资源安全为重点. 因此,它们强调范围检查、避免对“nullptr”解引用、避免悬空指针以及系统地使用异常(通过RAII)的可能性。 为了实现这一点,同时也为了最大限度地减少作为错误来源的晦涩代码,规则还强调简单性,以及在明确指定的接口后面隐藏必要的复杂性。

    许多规则是规定性的。(Many of the rules are prescriptive.) 我们对简单地说“不要那样做”而又没有提供替代方案的规则感到不安。

    这样做的一个后果是,一些规则只能由启发式检查来支持,而不是精确的和机械的可验证的检查来支持。 其他规则阐明了一般原则. 越是通用的规则,就越是有更加详细和特定的规则提供部分检查。

    这些指导方针致力于C++的核心及其使用。 我们预计,大多数大型组织、特定应用领域,甚至大型项目都需要进一步的规则,可能还需要进一步的限制,以及进一步的库支持。 例如,硬实时程序员通常不能自由使用自由存储(动态内存),并且在选择库时会受到限制。 我们鼓励制定更具体的规则,作为这些核心规则的补充。 构建您理想的小型基础库并使用它,而不是将您的编程水平降低到貌似优美的汇编代码。

    这些规则旨在允许[逐步采用](# S-现代化)。

    一些规则旨在增加各种形式的安全,而其他规则旨在减少事故的可能性,还有很多是兼顾两者的。旨在防止事故的规则通常会禁止完全合法的C++。然而,当有两种方式表达一个想法时,其中一种方式被证明是一个常见的错误来源,而另一种方式不是,我们会试图引导程序员使用后者。

    Processed: 0.009, SQL: 8