effective C++读书笔记 条款一 视C++为语言联邦

今天的C++已经是一个多重范型编程语言(multiparadigm programing language),同时支持过程形式(procedural),面向对象形式(object-oriented),函数形式(functional),泛型形式(generic),元编程形式(metaprogramming)的语言,这些能力和弹性使得C++成为一个无可匹敌的工具,但也可能引发疑惑:所有用法似乎都有例外,我们该如何理解这样一个语言呢?


最简单的方法是视C++为由相关语言组成的一个语言联邦,在其某个次语言中,各种守则与通例都倾向简单,直观易懂,容易记住。而当你从一个次语言转向另一个次语言,守则可能改变。为了理解C++,你必须认识其中4个主要的次语言:

1.C

说到底C++是以C为基础的,区块,语句,预处理器,内置数据类型,数组,指针等,统统来自于C。很多时候C++对问题的解法不过就是高级点的C解法。但当你以C++内的C成分工作时,高效编程守则映照出C的局限:没有模板,没有重载,没有异常……

2.Object-Oriented C++

这部分也就是C with Classes所诉求的:Classes(包括构造函数和析构函数),封装,继承,多态,虚函数(动态绑定)……等等,这一部分是面向对象设计在C++上的最直接实现。

3.Template C++

这是C++的泛型编程部分,也是大多数程序员经验最少的部分。Template相关考虑和设计已经弥漫整个C++,良好编程守则中“唯template适用”的特殊条款并不罕见。

4.STL

STL是个template程序库,看名称也知道,它是非常特殊的一个。它对容器,迭代器,算法,以及函数对象的规约有极佳的紧密配合与协调。


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

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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值