(整理自Effctive C++,转载请注明。整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/)
C++的各种能力和特性使它成为一个无可匹敌的工具,但也可能引发某些迷惑:所有“适当用法”似乎都有例外。我们该如何理解这种语言呢?最简单的办法就是将C++视为有相关语言组成的联邦而非单一语言。在它的某个次语言中,各种规则与通例都相对简单。然而从一个次语言移往另一个次语言,守则可能改变。
C++主要的次语言有四个:
1 C
所到底C++以C为基础。区块、语句、预处理器、内置数据类型、数组、指针等都来自C语言。许多时候C++对问题的解法其实就是较高级的C的解法:例如条款02谈到预处理器之外的另一选择;条款13谈到以对象管理资源。但当你以C++内的C成分工作时,高效编程守则会反映出C语言的局限:没有模版(templates),没有异常(exceptions),没有重载
(overloading)…。
2 Object-Oriented C++
类、封装、继承、多态、虚函数…。这一部分是面向对象设计之古典守则在C++上的最直接实施。
3 Template C++
这是C++的泛型编程的部分。泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。泛型编程最初诞生于C++中,目的是为了实现C++的STL(标准模板库)。其语言支持机制就是模板(Templates),模板的精神其实很简单:参数化类型。换句话说,把一个原本特定于某个类型的算法或类当中的类型信息抽掉,抽出来做成模板参数T。
4 STL
STL是个templates程序库,但却是非常特殊的一个。它的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。STL另一个重要特性是它不是面向对象的,为了具有足够通用性,主要依赖于模板而不是封装,继承和虚函数(多态性),这好像是一种倒退,但这正好是使得STL的组件具有广泛通用性的底层特征。STL有自己的办事方式,当你伙同它一起工作,你必须遵守它的规约。
记住这四个次语言,当你从一个切换到另一个,导致高效编程守则要求你改变策略时,不要感到惊讶。因此,C++不是一个带有一组守则的一体语言,而是一个语言联邦*,每个次语言都有自己的规约。
Effective C++_笔记_条款01_视C++为一个语言联邦的更多相关文章
-
【Effective c++ 读书笔记】条款01 视 C++ 为一个语言联邦
一开始,C++只是 C 加上一些面向对象的特性.C++最初的名称 C with Classes 也反映了这个血缘关系. 但是,现在,当这个语言逐渐成熟,它变得更活跃更无拘束,更大胆冒险,开始接受不同于 ...
-
Effective C++ 之 Item 1: 视C++为一个语言联邦
Effective C++ Chapter 1. 让自己习惯C++(Accustoming Yourself to C++) Item 1. 视C++为一个语言联邦(View C++ as a fed ...
-
Effective C++ 条款一 视C++为一个语音联邦
1.C语言 区块.语句.预处理器.内置数据类型.数组.指针等内容 2.OC++ 类.封装.继承.多态.virtual函数 等 3.Template C++ 泛型 ...
-
Effective C++条款01: 视C++为一个语言联邦
一开始C++定义为:C with Classes. 如今的C++已经是一个多重范型编程语言,可以把C++视为有四个次语言组成的联邦语言. C.C++任然以C为基础.区块.语句.预处理.内置语言类型.数 ...
-
Effective C++ 条款01:视C++为一个语言联邦
四个次语言 C Object-Oriented C++ Template C++ STL
-
Effective C++之条款1:视C++为一个语言联邦
C++中的sub-languages有如下四种: C Object-Oriented C++: (classes ,encapsulation(封装),inheritance(继承),polymo ...
-
EC笔记,第一部分:1.视C++为一个语言联邦
C++可看作由以下四种次语言组合而成1.C语言 高效,内置数据类型,数组,区块,语句,指针,预处理器,没有重载.异常.模板2.类 构造,析构,封装,继承,多态,迟绑定3.模板 模板元 ...
-
条款1:视C++为一个语言联邦
C++是门多范式语言,至少包括面向过程,面向对象,泛型,函数式,元变成等. 但谨记,不要随意混合使用各种特性,为自己制定使用原则,针对不同项目.业务. 如: 类C风格编程:没有模板,没有异常,没有重载 ...
-
条款01:视C++为一个语言联邦
C++由四部分组成: 1)C. 2)Object-Oriented C++.classes,封装,多态,动态绑定(virtual函数) 3)Template C++.泛型编程. 4)STL. 对于内置 ...
随机推荐
-
React Native知识9-ScrollView组件
一个包装了平台的ScrollView(滚动视图)的组件,同时还集成了触摸锁定的“响应者”系统. 记住ScrollView必须有一个确定的高度才能正常工作,因为它实际上所做的就是将一系列不确定高度的子组 ...
-
Highcharts——让你的网页上图表画的飞起
Highcharts是一款纯javascript编写的图表库,能够很简单便捷的在Web网站或Web应用中添加交互性的图表,Highcharts目前支持直线图.曲线图.面积图.柱状图.饼图.散点图等多达 ...
-
介绍.NET Core
在connect (),我们宣布.NET 核心将能完全释放,作为开放源码软件.我也答应在.NET 核心跟更多的细节.在这篇文章,我将提供.NET 核心,我们如何去释放它,它涉及到.NET 框架,如何和 ...
-
Linux进程同步之记录锁(fcntl)
记录锁相当于线程同步中读写锁的一种扩展类型,可以用来对有亲缘或无亲缘关系的进程进行文件读与写的同步,通过fcntl函数来执行上锁操作.尽管读写锁也可以通过在共享内存区来进行进程的同步,但是fcntl记 ...
-
全局精确流量调度新思路-HttpDNS服务详解
但凡使用域名来给用户提供服务的互联网企业,都或多或少地无法避免在有中国特色的互联网环境中遭遇到各种域名被缓存.用户跨网访问缓慢等问题.那么对于腾讯这样的域名数量在10万级别的互联网公司来讲,域名解析异 ...
-
javascript中break,continue和return语句用法小结:
Break语句会使程序立刻退出包含在最底层的循环或者退出一个switch语句,它是用来退出循环或者switch语句. 例如: <script type="text/javascript ...
-
verilog学习笔记(0)
assign赋值语句根本不允许出现在always语句块中 位于begin/end块内的多条阻塞赋值语句是串行执行的; 但是多条非阻塞赋值语句却是并行执行的,这些非阻塞赋值语句都会在其中任何一条语句执行 ...
-
winform 跨线程访问问题
一.问题描述 进行winform 开发我们在进行数据交换时避免不了使用多线程或异步方法,这样操作也将避免不了跨线程对控件进行操作(赋值.修改属性). 下面通过一个测试说明一下问题 点击一个按钮异步对t ...
-
Java 多线程(五)—— 线程池基础 之 FutureTask源码解析
FutureTask是一个支持取消行为的异步任务执行器.该类实现了Future接口的方法. 如: 取消任务执行 查询任务是否执行完成 获取任务执行结果(”get“任务必须得执行完成才能获取结果,否则会 ...
-
Spring事务的传播行为
本文主要介绍下Spring事务中的传播行为. 事务传播行为介绍 Spring中的7个事务传播行为: |事务行为|说明 | |:--|:--| |PROPAGATION_REQUIRED | 支持当 ...