1ms Faster
Home
  • Program

    • Lean in C++
  • Perfromance Engineering

    • [>>>>>]
  • Reading Note

    • [>>>>>]
  • ComputeArch

    • [_]
  • Compiler

    • [_]
  • System

    • [_]
Authoring
  • Categories
  • Tags
GitHub (opens new window)

Quincy Jet

We are.
Home
  • Program

    • Lean in C++
  • Perfromance Engineering

    • [>>>>>]
  • Reading Note

    • [>>>>>]
  • ComputeArch

    • [_]
  • Compiler

    • [_]
  • System

    • [_]
Authoring
  • Categories
  • Tags
GitHub (opens new window)
  • Lean in c++

  • Performance Engineering

  • Misc

  • Reading Notes

    • Effective C++

    • More Effective C++

      • 基础议题
      • 操作符(operators)
      • 异常(exceptions)
      • 效率(efficiency)
      • 技术(techniques, idioms, patterns)
      • 杂项讨论,Misc
        • 杂项讨论,Misc
          • Item 32:在未来时态下发展程序
          • Item 33:将非尾端类(non leaf classes)设计为抽象类(abstract classes)
          • Item 34:如何在同一个程序中结合 C++和 C
          • Item 35:让自己习惯于标准 C++语言(多用一些C++的新特性)
    • 《C++ 性能优化指南》
  • Wiki
  • Reading Notes
  • More Effective C++
Quincy Jet
2022-06-27
Content

杂项讨论,Misc

# 杂项讨论,Misc

# Item 32:在未来时态下发展程序

在未来时态下发展程序, 为以后程序的变动留下足够的弹性设计空间;(设计模式和设计经验, 架构的经验)

● 提供完整的 classes(见Item E18)——即使某些部分目前用不到。当新的需求进来,你不太需要回头去修改那些 classes。

● 设计你的接口,使有利于共同的操作行为,阻止共同的错误(见Item E46)。让这些 classes 轻易地被正确运用,难以被错误运用。例如,面对那些“copying和 assignment 并不合理”的classes,请禁止那些动作的发生(见Item E27)。请防止部分赋值(partial assignments,见Item 33)的发生。

● 尽量使你的代码一般化(泛化),除非有不良的巨大后果。举个例子,如果你正在写一个算法,用于树状结构(tree)的来回遍历,请考虑将它一般化,以便能够处理任何种类的 directed acyclic(非环状的)graph

# Item 33:将非尾端类(non leaf classes)设计为抽象类(abstract classes)

将non leaf class 设计为一个抽象类(最上层的类, 利于派生)

# Item 34:如何在同一个程序中结合 C++和 C

如何在同一个程序中结合C和C++

#ifdef _cplusplus
extern "C" {
#endif

[ C code ]
    
#ifdef _cplusplus
}
#endif
1
2
3
4
5
6
7
8
9

static class 对象、全局对象、namespace 内的对象以及文件范围(file scope)内的对象,其 constructors 总是在 main 之前就获得执行。这个过程称为 static initialization(见Item E47)

# Item 35:让自己习惯于标准 C++语言(多用一些C++的新特性)

让自己习惯于标准的C++的一些新特性,

  • 支持数值应用。复数(complex numbers)长久以来是许多 C++教科书的示范对象,如今终于被奉祀于标准程序库的殿堂上。此外,标准程序库还包含特殊的数组类(valarrays),可以制止别名(aliasing)的发生。这些数组比传统的内建数组有更进取的优化倾向,特别是在多进程结构体系(multiprocessing architectures)下。标准程序库也提供一些常用的数值函数,包括“部分和(partial sum)”以及“相邻差值(adjacent difference)”。●
  • 支持广泛用途的 containers(容器)和 algorithms(算法)。C++标准程序库内含一组 class templates 和 function templates,统称为 Standard Template Library(STL)。STL 是 C++标准程序库中最具革命性的部分。稍后我会摘要说明其特征。
  • 支持数值应用。复数(complex numbers)长久以来是许多 C++教科书的示范对象,如今终于被奉祀于标准程序库的殿堂上。此外,标准程序库还包含特殊的数组类(valarrays),可以制止别名(aliasing)的发生。这些数组比传统的内建数组有更进取的优化倾向,特别是在多进程结构体系(multiprocessing architectures)下。标准程序库也提供一些常用的数值函数,包括“部分和(partial sum)”以及“相邻差值(adjacent difference)”。
  • 支持广泛用途的 containers(容器)和 algorithms(算法)。C++标准程序库内含一组 class templates 和 function templates,统称为 Standard Template Library(STL)。STL 是 C++标准程序库中最具革命性的部分。稍后我会摘要说明其特征。
  • STL
    • 支持 C标准函数库。别担心,C++还记得它的根源。某些微小的变化,使“C++版本的 C函数库”与“C++的强烈类型检验性质”得以一致。但是,你对 C函数库所知道的一切,以及对它的爱恨情仇,在 C++中都依然存在。
    • 支持 strings。就像 C++标准程序库小组主席 Mike Vilot所说:“如果没有提供一个标准的 string 类型,恐怕会出现街头流血事件!”(有些人就是这么感情用事。)冷静点,放下那些砖头棍棒——C++标准程序库提供了 string。
    • 支持国别(地域别、本土化,localization)。不同的文化使用不同的字符集,并在显示日期、时间、排序事物、货币值的时候有着不同的习俗。标准程序库对于国别的支持,使程序开发得以轻松容纳多种文化差异。
    • 支持 I/O。iostream 程序库仍旧是标准 C++的一部分,但是委员会对它做了一些修补。虽然某些 classes 被剔除了(特别值得注意的是 iostream 和fstream),某些 classes 被取代了(例如 string-based stringstreams 取代了 char*-based strstreams,后者不再被标准委员会认可),不过 iostream 内的各个标准 classes仍可忠实反映那些早已存在多年的基本功能。
    • 支持数值应用。复数(complex numbers)长久以来是许多 C++教科书的示范对象,如今终于被奉祀于标准程序库的殿堂上。此外,标准程序库还包含特殊的数组类(valarrays),可以制止别名(aliasing)的发生。这些数组比传统的内建数组有更进取的优化倾向,特别是在多进程结构体系(multiprocessing architectures)下。标准程序库也提供一些常用的数值函数,包括“部分和(partial sum)”以及“相邻差值(adjacent difference)”。
    • 支持数值应用。复数(complex numbers)长久以来是许多 C++教科书的示范对象,如今终于被奉祀于标准程序库的殿堂上。此外,标准程序库还包含特殊的数组类(valarrays),可以制止别名(aliasing)的发生。这些数组比传统的内建数组有更进取的优化倾向,特别是在多进程结构体系(multiprocessing architectures)下。标准程序库也提供一些常用的数值函数,包括“部分和(partial sum)”以及“相邻差值(adjacent difference)”。
    • 支持广泛用途的 containers(容器)和 algorithms(算法)。C++标准程序库内含一组 class templates 和 function templates,统称为 Standard Template Library(STL)。STL 是 C++标准程序库中最具革命性的部分。稍后我会摘要说明其特征。

推荐的阅读清单: 后面可以一起总结

  1. 有一本书的基调和我的 Effective C++差不多,但涵盖主题不同:C++ Strategies and Tactics

一个造轮子的repo: https://github.com/codecrafters-io/build-your-own-x

shared_ptr() 代码

auto_ptr() 代码

技术(techniques, idioms, patterns)
《C++ 性能优化指南》

← 技术(techniques, idioms, patterns) 《C++ 性能优化指南》→

Copyright © 2017-2023 Quincy Jet | MIT License
  • Auto
  • Light
  • Dark
  • Read