[Effective C++] 01. View C++ as a federation of languages.

C++在一开始只是在C的基础上加上了面向对象的特性,最初的名称就是C with classes。随着C++ 这门语言的逐渐成熟,越来越多的编程范式被引入进来,这些新的特性使得C++变得日益强大。

如今的C++已经是个多重范型编程语言(multiparadigm progmming language ),同时支持了过程形式(procedural)、面向对象(oo)、函数形式(functional)、泛型(generic)、元编程(metaprogramming)。这些能力和弹性促成了C++无与伦比的能力,同时也给C++语言的使用带来一些迷惑:所有的适当用法似乎都有例外。最简单的理解C++的方式就是视C++为一个语言联邦而非单一语言。在C++的某个子语言(sub-language)中,规则是简单、易懂的,然后从某个子语言移到另一个子语言中,规则可能会改变,为了理解C++,C++的程序员需要了解C++的 主要 sub-language。幸运的是一共只有4个。

  • C。 说到底C++语言还是基于C语言的,语句块(block)、语句(statement)、预处理器(preprocess)、指针(pointer)、内置类型(built-in data type)等统统都来自于C。
  • Object-Oriented C++。这部分是C with classes 所诉求的,构造函数、析构函数、封装、继承、多态、虚函数(virtual function)
  • Template C++。这是C++的范型编程部分(generic programming)。也是大多数程序员用的最少的部分。
  • STL。STL是个template程序库。它对容器(container)、迭代器(iterator)、算法(algorithms)以及函数对象都做了极佳的协调。

请记住这四个sub-language,当你从摩尔个sub-language移到另一个的时候,导致高效编程的守则会发生变化,请不要奇怪。例如对内置(C-like)语言来讲pass-by-value通常比pass-by-reference更高效,但是当你从C part of C++移往 OO C++由于用户自定义的构造函数和析构函数的存在,pass-by-reference-const往往更好。当运用template C++的时候尤其如此,因为彼此甚至不知道所处理对象的类型,然而一旦跨入STL你会了解,迭代器和函数对象都是在C的指针上构建的,所以对于STL的迭代器和函数对象而言,旧式的C pass-by-value守则再次适用了。

所以说C++并不是一个带有一组规则的语言,它是一个多语言联邦,从这个角度来理解C++,会发现容易理解的多。

请记住:C++ 高效编程守则视状况而变化,取决于你使用的是C++的哪一部分sub-language。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值