一开始,C++只是 C 加上一些面向对象的特性。C++最初的名称 C with Classes 也反映了这个血缘关系。

但是,现在,当这个语言逐渐成熟,它变得更活跃更无拘束,更大胆冒险,开始接受不同于 C with Classes 的各种观念、特性和编程战略。
今天的 C++ 已经是个多重泛型编程语言,一个同时支持过程形式、面向对象形式、函数形式、泛型形式、元编程形式的语言。

那,我们又该如何理解这样一个语言呢?

最简单的办法是将 C++ 视为一个有相关语言组成的联邦的而非单一语言。

为了理解C++,你必须认识其主要的次语言:

  • C。说到底 C++ 仍是 以 C 为基础。

    区块(blocks)、语句(statements)、预处理器(preprocessor)、内置数据类型(built-in data typpes)、数组(arrays)、指针(pointers)等统统来自 C 。

    但是 C 语言也有很多局限:没有模板、没有异常、没有重写。

  • Object-Oriented C++ 。

    这部分包括 classes(构造函数 和 析构函数)、封装(encapsulation)、继承(inheritance)、多态(polymorphism)、virtual 函数(动态绑定)……

  • Template C++ 。 这是 C++泛型编程的部分。

  • STL。STL 是个 template 程序库。它对容器(containers)、迭代器(iterators)、算法(algorithms)以及函数对象(function objects)的规约有着极佳的紧密配合与协调。

记住这四个次语言,当你从某个次语言切换到另一个,导致高效编程守则要求你改变策略时,不要感到惊讶。例如:
对内置类型而言 pass-by-value 通常比 pass-by-reference 高效;但当你从 C part of C++ 移往 Object-Oriented C++,由于用户自定义(user-defined)构造函数和析构函数的存在, pass-by-reference 往往更好。

因此,C++ 并不是一个带有一组守则的一体语言;它是从四个次语言组成的联邦政府,每个次语言都有自己的规约。记住这四个次语言你就会发现 C++ 容易了解的多。

【Effective c++ 读书笔记】条款01 视 C++ 为一个语言联邦的更多相关文章

  1. Effective C++ 之 Item 1: 视C++为一个语言联邦

    Effective C++ Chapter 1. 让自己习惯C++(Accustoming Yourself to C++) Item 1. 视C++为一个语言联邦(View C++ as a fed ...

  2. Effective C++_笔记_条款01_视C++为一个语言联邦

    (整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) C++的各种能力和特性使它成为一个无可匹敌的工具,但也可能引发某 ...

  3. effective C++ 读书笔记 条款08

    条款08  别让异常逃离析构函数: 假设在析构函数其中发生了异常,程序可能会过早结束或者导致不明白行为(异常从析构函数传播出去) 看代码: #include <iostream> usin ...

  4. effective C++ 读书笔记 条款11

    条款11: 在operator= 中处理"自我赋值" 在实现operator=时考虑自我赋值是必要的就像 x=y .我们不知道变量x与y代表的值是否为同一个值(把x和y说成是一个指 ...

  5. Effective C++条款01: 视C++为一个语言联邦

    一开始C++定义为:C with Classes. 如今的C++已经是一个多重范型编程语言,可以把C++视为有四个次语言组成的联邦语言. C.C++任然以C为基础.区块.语句.预处理.内置语言类型.数 ...

  6. Effective C++ 条款01:视C++为一个语言联邦

    四个次语言 C Object-Oriented C++ Template C++ STL

  7. effective C++ 读书笔记 条款14 以对象管理资源

    如果我们使用一个投资行为的程序库: #include "stdafx.h" #include <iostream> #include <memory> us ...

  8. Effective C++ 条款一 视C++为一个语音联邦

    1.C语言         区块.语句.预处理器.内置数据类型.数组.指针等内容 2.OC++       类.封装.继承.多态.virtual函数 等 3.Template C++       泛型 ...

  9. Effective C++之条款1:视C++为一个语言联邦

    C++中的sub-languages有如下四种: C Object-Oriented C++:   (classes ,encapsulation(封装),inheritance(继承),polymo ...

随机推荐

  1. 【转】Android Canvas绘图详解

    转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html Android中使用图形处理引擎,2D部分是an ...

  2. Python built-in 函数

    一.abs(x) 说明:返回绝对值 参数可以是:负数.正数.浮点数或者长整形 实例: abs(-1.2) #返回 1.2 abs(1.2) #返回 1.2 abs(-11216.5) #返回 1121 ...

  3. java并发编程 volatile关键字 精准理解

    1.volatile的作用 一个线程共享变量(类的成员变量.类的静态成员变量等)被volatile修饰之后,就具有以下作用: 1)并发中的变量可见性(不同线程对该变量进行操作时的可见性),即一个线程修 ...

  4. 如何在eclipse查看jdk源码(src.zip)

    在eclipse编写代码的过程中,有时候想点进去看看jdk的源码,了解下里面具体的实现.在没有任何配置的情况下,应该是看不到源码的. 其实只需要把jdk安装目录下的src.zip压缩包添加到eclip ...

  5. mongodb客户端操作常用命令

    一启动mongodb数据库mongod --dbpath E:\mongo\data\db(这里些自己的mongodb数据库存放目录)二客户端操作1.显示数据库集合show dbs2.新建数据库use ...

  6. js报错 object is not a function

    主要是js函数名重名了,重命名就可以了.

  7. shell去重

    sort命令可以对文本的内容进行排序 uniq命令可以对文本内容连续的内容进行去重,非连续的重复内容无法去重 sort 文件 | uniq 可以达到去除所有重复数据的目的(因为先排序了,这样相同的内容 ...

  8. shell脚本学习(2)比较两个数字大小

    注意:shell中对比字符串只能使用==.<.>.!=.-z.-n.对比字符串时,末尾一定要加上x(或者a.b等)一个字符,因为if [ $1x == "ab"x ]时 ...

  9. 了解Web及网络基础(一)

    在理解HTTP之前,先大概知道TCP/IP是什么. 当不同的硬件.操作系统或者不同的设备想要进行通信,那么双方就要遵循同一个协议才可以进行通信,而这个协议的通称就是TCP/IP,也就是说TCP/IP之 ...

  10. eplise中运行提示 A fatal error has been detected by the java runtime environment

    今天一同事出现运行项目时,提示 A fatal error has been detected by the java runtime environment,具体表现是使用我们框架,不能正常的打印日 ...