• 《Effective C++》系列之导读部分


            知道这本书已经好久了,但是一直没有去认真拜读,在实践中发现自己还是需要多提升提升编码的规范和格局,这样才能制造出更好的代码。本书一共列出了45个具体的细节来修复代码中的不足。为了搞懂本书,我们先从导读说起。

    目录

    一、书中中英文对照

    二、术语 

    2.1 声明式(declaration)

    2.2 定义式(definition)

     2.3 初始化

    2.4 构造函数

    2.5 STL 标准模板库

    2.6 接口

    2.7 关于线程

    2.8 TR1 和 Boost

    三、总结


    一、书中中英文对照

            本书中有许多编程的英文术语,我给他贴出来放到下面:

    英文术语描述
    abstract抽象的
    abstraction抽象性
    access访问
    access level访问级别
    access function访问函数
    adapter适配器
    address地址
    address-of operator取地址操作符
    aggregation聚合
    algorithm算法
    allocate分配
    allocator分配器
    application应用程序
    architecture体系结构
    argument实参
    array数组
    arrow operator箭头操作符
    assembly language汇编语言
    assert(-ion)断言
    assign(-ment)赋值
    assignment operator赋值操作符
    base class基类
    base type基类型
    binary search二分查找
    binary tree二叉树
    binary operator二元操作符
    binding绑定
    bit
    bitwise以 bit 为单元逐一......
    block区块
    boolean布尔值
    breakpoint断点
    build构建
    build-in内置
    bus总线
    byte字节
    cache高速缓存(区)
    call调用
    callback回调
    call operatorcall 操作符
    character字符
    child class子类
    class
    class template类模板
    client客户(端)
    code代码
    compatible兼容
    compiler time编译期
    compiler编译器
    component组件
    composition复合
    concrete具象的
    concurrent并发
    configuration配置
    connection连接
    constraint约束(条件)
    construct构件
    container容器
    constC++ 关键字,constant 的缩写
    constant常量
    constructor构造函数
    copy拷贝(动词/名词),副本(名词)
    create创建
    custom定制
    data数据
    database数据库
    data member数据成员(变量)
    data structure数据结构
    debug调试
    debugger调试器
    declaration声明式
    default缺省(默认)
    definition定义式
    delegate委托
    dereference提领(解参考)
    derived class派生类
    design pattern设计模式
    destroy销毁
    destructor析构函数
    directive指示符
    document文档
    dynamic binding动态绑定
    entity物体
    encapsulation封装
    enum(-eration)枚举
    equality相等
    equivalence等价
    evaluate核定、核算
    exception异常
    explicit显式
    expression表达式
    file文件
    framework框架
    full specialization全特化
    function函数
    function object函数对象
    function template函数模板
    generic泛型、泛化、一般化
    getter取值函数
    global全局的
    handle句柄
    handler处理函数
    hash table哈希表、散列表
    header(file)头文件
    heap
    hierarchy继承体系
    identifier标识符
    implement(-ation)实现
    implicit隐喻的、暗自的、隐式
    information信息
    inheritance继承
    inline内联
    initialization list初始化列表
    initialize初始化
    instance实体
    instantiate实体化
    interface接口
    Internet互联网
    interpreter解释器
    invariants恒常性
    invoke调用
    iterator迭代器
    library程序库
    linker连接器
    literal字面常量
    list链表
    load装载
    local局部的
    lock机锁
    loop循环
    lvalue左值
    macro
    member成员
    member function成员函数
    memory内存
    memory leak内存泄漏
    meta
    meta-programming元编程
    modeling塑膜
    module模块
    modifier修饰符
    multi-tasking多任务
    namespace命名空间
    native固有的
    nested嵌套的
    object对象
    object based基于对象的
    object model对象模型
    object oriented面对对象
    operand操作数
    operating system操作系统
    operator操作符
    overflow溢出
    overhead额外开销
    overload重载
    override覆写
    package
    parallel并行
    parameter参数、形参
    parent class父类
    parse解析
    partial specialization偏特化
    pass by reference按址传递
    pass by value按值传递
    pattern模式
    placement delete(某种特殊形式的 delete operatoe)
    placement new(某种特殊形式的 new operatoe)
    pointer指针
    polymorphism多态
    preprocessor预处理器
    print打印
    printer打印机
    process进程
    program程序
    programer程序员
    programming编程
    project项目
    pseudo code伪代码
    quality质量
    queue队列
    raw原始的、未经处理的
    recursive递归
    refer to指向、指称
    reference引用
    regular expression正则表达式
    resolve解析
    return返回
    return type返回类型
    return value返回值
    runtime运行期
    rvalue右值
    save保存
    schedule调度
    scheduler调度器
    scope作用域
    search查找
    semantics语义
    setter设值函数
    signature签名
    smart pointer智能指针
    specialization特化
    source源码
    stack
    standard library标准程序库
    statement语句
    static静态的
    string字符串
    subtype子类型
    support支持
    template模板
    temporary object临时对象
    text文本
    thread线程
    thread safe多线程安全
    throw抛出
    token语汇单元
    type类型
    unary function单参函数
    underflow下溢
    unqualified未经资格修饰
    user用户
    user interface用户界面
    value
    variable变量
    vector矢量
    virtual function虚拟函数
    virtual machine虚拟机

    二、术语 

    2.1 声明式(declaration)

            声明式是告诉编译器变量或者函数的名称和类型,但略去细节。

    1. extern int x; // 对象声明式
    2. std::size_t numDigits(int number); // 函数声明式
    3. class Widget; // class declaration // 类声明式
    4. template<typename T> // 模板声明式
    5. class GraphNode; // typename 的使用
    • 返回类型是 std::size_t 表示类型 size_t 位于命名空间 std 内。这个命名空间是几乎所有 C++ 标准程序库元素的存放处。
    • C 标准程序库也适用于 C++,而继承自 C 的符号有可能存在于全局作用域或 std 内,抑或是两者兼具,取决于哪个头文件被包含。

    2.2 定义式(definition)

            定义式的任务是提供编译器一些声明式所略去的细节。对对象而言,定义式是编译器为此对象分配内存的地点。

    1. int x; // 定义对象
    2. std::size_t numDigits(int number) // 定义函数
    3. { // 此函数返回其参数的数字个数
    4. std::size_t digitsSoFar = 1; // 例如十位数返回 2,百位数返回 3
    5. while ((number /= 10) != 0)
    6. ++digitsSoFar;
    7. return digitsSoFar;
    8. }
    9. class Widget
    10. { // 定义类
    11. public:
    12. Widget();
    13. ~Widget();
    14. // ...
    15. };
    16. template<typename T> // 定义模板
    17. class GraphNode
    18. {
    19. public:
    20. GraphNode();
    21. ~GraphNode();
    22. // ...
    23. };

     2.3 初始化

            初始化是给予对象初值的过程。对用户自定义类型的对象而言,初始化由构造函数执行。默认构造函数是一个可被调用而不带任何实参者。这样的构造函数要不没有参数,要不就是每个参数都有缺省值。

    1. class A
    2. {
    3. public:
    4. A(); // 默认构造函数
    5. };
    6. class B
    7. {
    8. public:
    9. explicit B(int x = 0, bool b = true); // 默认构造函数
    10. };
    11. class C
    12. {
    13. public:
    14. explicit C(int x); // 不是默认构造函数
    15. };
    16. void doSomething(B bObject); //函数,接受一个类型为 B 的对象作为参数
    17. B bObj1; // 类型为 B 的对象
    18. doSomething(bObj1); // 正确,传递一个类型为 B 的对象给 doSomething 函数
    19. B bObj2(28); // 正确,定义 B 类型的类型并赋初始值为 28
    20. // (函数的 bool 参数缺省为 true)
    21. doSomething(28); // 错误! doSomething 函数应接受一个 B 类型的参数,而不是 int 类型
    22. // 并且没有 int 至 B 之间隐式转换
    23. doSomething(B(28)); // 正确,使用 B 构造函数及那个 int 类型显式转换(也就是转型)为一个 B 类型以满足此调用
    • explicit 可阻止它们被用来执行隐式类型转换,但它们仍可被用来进行显式类型转换。
    • explicit 的构造函数通常比 implicit 更受欢迎,因为它们禁止编译器执行非预期(往往也不被期望)的类型转换。

    2.4 构造函数

            构造函数被用来以同型对象初始化自我对象,拷贝赋值操作符被用来从另一个同型对象中拷贝其值到自我对象。

    1. class Widget
    2. {
    3. public:
    4. Widget(); // 默认构造函数
    5. Widget(const Widget& rhs); // 拷贝构造函数
    6. Widget& operator=(const Widget& rhs); // 拷贝赋值操作符
    7. // ...
    8. };
    9. Widget w1; // 调用默认构造函数
    10. Widget w2(w1); // 调用拷贝构造函数
    11. w1 = w2; // 调用拷贝赋值操作符
    12. Widget w3 = w2; // 调用拷贝构造函数
    13. bool hasAcceptableQuality(Widget w);
    14. Widget aWidget;
    15. if (hasAcceptableQuality(aWidget))
    16. ;
    • 注意 = 可以调用拷贝赋值操作符,也可以调用拷贝构造函数,需要进行区别。
    • 拷贝构造函数是一个尤其重要的函数,因为它定义一个对象通过以值传递。

    2.5 STL 标准模板库

            STL 是 C++ 标准程序库的一部分,致力于容器(如 vector、list、set、map 等等)、迭代器(如 vector::iterator, set::iterator 等等)、 算法(如 for_each、find、sort 等等)及相关功能。许多相关功能以函数对象(function objects)实现,那是行为像函数的对象。这样的对象来自于重载 operator()(function call 操作符)的类。我们不能对STL陌生。

    • 特别强调,使用了不明确(未定义)行为的结果是不可预期的,程序会出现错误行为,有时执行正常,有时造成崩坏,有时更产出不正确的结果。
    • 开发时要尽可能避开不明确行为。

    2.6 接口

            对其他语言转换至 C++ 阵营的程序员而言,另一个可能造成困惑的术语是接口。Java 和 .NET 语言都提供接口为语言元素, 但 C++ 没有,本书中使用术语 “接口” 时,一般谈的是函数的签名(signature)或类的可访问元素(例如我可能会说类的 “公共接口” 或 “保护接口 ” 或 “私有接口”),或是针对某模板类型参数需为有效的一个表达式。也就是说的接口完全是指一般性的设计观念。

    2.7 关于线程

            作为一个语言,C++ 对线程没有任何意念,事实上它对任何并发事物都没有意念。C++ 标准程序库也一样。当 C++ 受到全世界关注时多线程程序还不存在。

            但是本书作者会说出哪块可能会存多线程安全问题。敬请关注后续内容。

    2.8 TR1 和 Boost

    TR1(Technical Report 1 简称 TR1)是一份规范,描述加入 C++ 标准程序库的诸多新功能。这些功能以新的类模板和函数模板形式体现,针对的题目有哈希表,引用计数智能指针,正则表达式以及更多。 所有 TR1 组件都被置于命名空间 tr1 内,后者又嵌套于命名空间 std 内。

    Boost 是个组织,亦是一个网站,提供可移植、同行复审、源码开放的 C++ 程序库。大多数 TR1 机能是以 Boost 的工作为基础。在编译器厂商于其 C++ 程序库中含入 TR1 之前,对那些搜寻 TR1 实现品的开发人员而言,Boost 网站可能是第一个逗留点。Boost 提供比 TR1 更多的东西,所以无论如何值得了解它。

    三、总结

            以上均为本书的基础介绍,期待后续的改善程序的细节的更新吧。

     
    

  • 相关阅读:
    Vue多环境打包配置,根据命令生成不同打包文件名
    【华为OD机试真题 python】 免单统计【2022 Q4 | 100分】
    HTML静态网页作业——基于html+css+javascript+jquery+bootstarp响应式成都家乡介绍网页
    C语言每日一题(11):杨辉三角
    logstash/filebeat只接收最近一段时间的数据
    XenServer 存储、vApp、高可用
    开源大模型ChatGLM2-6B 2. 跟着LangChain参考文档搭建LLM+知识库问答系统
    MATLAB中拟合线性方程(最小二乘法)
    深入解析Flutter下一代渲染引擎Impeller
    HOOPS Communicator对3D大模型轻量化加载与渲染的4种解决方案
  • 原文地址:https://blog.csdn.net/weixin_44120785/article/details/128068572