• 经典阅读-《Effective C++》Item1:视C++为一个联邦语言


    C++已经是个多重范型编程语言(multiparadigm programming language),一个同时支持过程形式(procedural)、面向对象形式(object-oriented)、泛型形式(generic)、元编程形式(metaprogramming)的语言。

    如何理解这样的一个语言呢?

    将C++视为一个由相关语言组成的联邦而非单一语言,在某个子语言(sublanguage)中,各种守则和通例都倾向简单、直观易懂、并且容易记住。然而从一个子语言转移到另外的一个子语言,守则可能改变。


    C++的四个主要的子语言:

    • C

    C++以C为基础。区块(block)、语句(statements)、预处理器(preprocessor)、内置数据类型(built-in data type)、数组(arrays)、指针(pointers)等都来自C语言。

    • Object-oriented C++

    这一部分是面向对象设计的古典守则在C++上的最直接实施,其中包括类的封装、继承、多态、virtual虚函数等等。

    • Template C++

    C++的范型编程部分,他们带来了新的编程范型,也就是所谓的template metaprogramming(TMP模板元编程)。

    • STL

    template程序库,对容器、迭代器、算法以及函数对象的规约有极佳的紧密配合与协调。


    记住这四个子语言,当从某一个子语言切换到另一个子语言的时候,导致高效编程守则要求你改变策略时,不要感到惊讶。例如对于内置类型而言pass-by-value通常比pass-by-reference高效。但当从C part of C++移往Object-oriented C++,由于用户自定义构造函数和析构函数的存在,pass-by-reference-to-const往往更好用。运用Template C++时尤其如此,因为此时你甚至都不知道所处理的对象的类型。然而一旦跨入STL,你就了解到迭代器和函数对象都是在C指针上塑造出来的,所以对STL的迭代器和函数对象而言,pass-by-value更适用(参见Item20)。

    所以,C++并不是一个带有一组守则的一体语言,它是由4个子语言组成的联邦政府,每个子语言都有自己的规约。


    请记住:

    C++高效编程守则视情况而变化,取决于你使用C++的哪一个部分。

  • 相关阅读:
    每日一题 为了工作 2020 0412 第四十一题
    每日一题 为了工作 2020 04011 第四十题
    每日一题 为了工作 2020 0410 第三十九题
    每日一题 为了工作 2020 0409 第三十八题
    每日一题 为了工作 2020 0408 第三十七题
    每日一题 为了工作 2020 0407 第三十六题
    每日一题 为了工作 2020 0406 第三十五题
    每日一题 为了工作 2020 0405 第三十四题
    学习总结(二十四)
    学习总结(二十三)
  • 原文地址:https://www.cnblogs.com/stemon/p/4323844.html
Copyright © 2020-2023  润新知