《Effective c++》学习笔记 (1st.视C++为一个语言联邦)

从大一到大三经常在CSDN上搜索答案,想着一直受大家的帮助(bai piao)也不太好,终于下定决心也来写写博客(其实是读书笔记?),希望能勉励自己不断学习,同时如果有能帮到大家的部分就再好不过了!

今天开始读《Effective c++》这本书,据说是不论初学者还是编程老手都适合读的一本C++巨作,甚至有C++程序员应该分为读过这本书和没读过这本书两部分的说法。这本书的导读里有提到,“ 这本书最佳的用途是了解C++是怎么做的、为什么要那么做以及那么做有什么优势。虽说盲目遵循书中提到的东西是非常不适合的,但如果没有好的理由也不该违反任何一个条款” 之类blablabla的,总之一大堆的把我唬得一愣一愣2333333。

那么在正文开始之前说下,我的习惯是结合书中一部分内容以及自己的理解,如果有什么不对的地方还请大家多多指教!

PS.虽然据说初学者也适合读,但没有一定基础的话读起来会很费劲的,所以在读这书之前至少也该知道些C++的基础语法。
PPS.大佬例外!



把C++看作成一个语言联邦

C++最开始是C with class这个名称,也就是C语言加上一点面向对象的特性,不过当它逐渐成熟之后就变得大胆,接受了很多不同于C with class 的观念、特性和编程战略,以至于到现在它已经成了一个多重范型编程语言:同时可以支持过程形式、面向对象形式、函数形式、泛型形式、元编程形式的语言,这些特性让它无可匹敌,但也让它逐渐变得复杂,所有合适的做法好像都有例外,那我们该怎么来理解这门语言?

于是书中提到,最简单的做法就是将它看作一个 “语言联邦” ,如果觉得这个词有点生涩拗口难以理解的话,就当成一个用各种零件拼装起来的高达好了!那么由此衍生,组成这台高达的各种零件就是书中提到的 “次语言” 。

为了理解好C++,这些零件(次语言)必须要好好认识,它们有四个:

  • C

    原汁原味的C语言,毕竟C++是由C语言衍生出来的,正如Win10兼容WinXP的程序(至少大部分兼容吧)一样,你可以在C++的编译器上运行C的程序,但反过来就不行啦。

  • Object-Oriented C++

    书中说这是C with class 所述求的,所以光看字面——有类的C语言?不不不,这是面向对象(Object-Oriented,简称OO),封装继承多态虚函数等等等等……学校开的C++课程一般也都主要也都是教这个吧?总之C++大部分不同于C的基础语法都可以归纳在这里边。

  • Template C++

    C++泛型编程的部分,上课的时候老师肯定也会教一些模板编程,但实际上某些巨佬已经用Template发展出了一门崭新的编程范型,也就是传说中的“模板元编程”,记得在哪里看到过这么一个说法:模板元编程是对模板的一种“过于聪明的用法”。所以可取还是不可取也就仁者见仁智者见智咯。

  • STL

    用Template实现的一个程序库,封装了很多实用的容器(containers)、迭代器(iterators)、算法(algorithm)以及函数对象(funtion objects),某种程度上说,STL真的让C++的入门难度降低了很多,在编程中使用STL能节省很多构造复杂数据结构和算法的时间,但相对的,使用它必须遵守它的规约,例如当map的key值使用自定义类时应该重载<运算符用于排序之类的。说真的,一旦习惯上了真的是丢不掉23333,但是!STL的报错信息一般都很难读懂!特别对于我这样的白痴来说那就是天书。

那么在记住这四门次语言之后,一旦你从其中的一门切换到另一门,相应的也应该改变你的策略,例如对C这个部分来说,pass-by-value(传递值)通常比pass-by-reference(传递引用)要高效,但一旦进入C++面向对象部分的时候,由于自定义类中的构造函数、析构函数的存在,pass-by-reference-to-const(传入常引用)更好,运用Template时尤其如此,因为你甚至不知道所处理对象的类型。然而一旦进入STL你就会了解到,迭代器和函数对象都是在C指针之上塑造出来的,所以C的pass-by-value再次适用。
(注:这个例子是书上提到的,可能因为陌生名词对某些童鞋造成困扰,如果有这种感觉的话可以暂时忽略不去深究哦,因为这其中的条例在《Effective C++》后边会有专门提到)

回到正题,书中提到:“C++并不是一个带有一组守则的一体语言,它是由四个次语言组成的联邦政府(所以叫语言联邦),每个次语言都有自己的规则,记住它们你就会发现C++比想象中容易了解得多。”

总结一下,C++拥有非常多的特性,各个特性间所遵循的规范也是不同的,如果想充分发挥出C++的强大力量,必须学会的就是根据规范合理调整思路方案。也就是书中这一节最后希望我们记住的一点:

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

你可能感兴趣的:(《Effective c++》学习笔记 (1st.视C++为一个语言联邦))