> For the complete documentation index, see [llms.txt](https://jizhuoran.gitbook.io/mali-gpu/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jizhuoran.gitbook.io/mali-gpu/fan-wai/effective-c++-di-san-ban.md).

# Effective C++（第三版）

如果C是一个能绞死自己的绳索，那么C++就是个五金店，里面还挤满了许多自告奋勇帮你绑绳结的人。

其实我是一个不怎么了解编程语言的人，至少在两三年前我唯二会的语言是haskell和C，但是现在我已经忘记了这两种语言，转而投向了python和C++。我无意去挑起一场争论什么编程语言好的战争，但是作为一个随波主流的人，python和C++带给我的便利是要超过原来的haskell和C的。

曾经跟大神们讨论过什么才算是C++，而不是"C with STL"甚至是“C with cout”。那么在这本书的第一章的第一个条款就回答了这个问题，C++其实是一个语言联邦：类C的部分，OOP C++， Template C++，STL C++。

类C部分没有什么好说的，C这个语言因为他本身支持的“功能”比较少，所以没有很多需要去学的地方。基本上所有的操作就是那个样子，鲜有例外也少有百思不得其解之处。

那么对于我这种写过几百行C++代码，一瓶子不满半瓶子晃荡的人来说，C++最令人费解的便是他的OOP部分。可能确实是因为写的代码太少，就算是那些constructor，destructor，copy，assignment啥的就够让我头大了。就单单一个constructor，就有赋值，有构造，如果不系统的去学习，几乎是无法预期他的行为的。要是再加上继承，这里有个virtual那里有个override的作用域，还得时不时的来个default parameter的绑定时间和调用时间，那么我的程序便只能是弥散着无限的bugs了。而这本书，就详尽的讲了上述几乎是所有的坑，这让我甚至怀疑这本书的作者究竟经历过什么。。。其实我一直觉得有个悖论，因为天才可能不会觉得我上面提出的问题是问题，他们可能觉得这就跟1+1=2一样稀疏平常，然而对于一般人，究竟是要犯多少错误才能总结出这么全面的经验。好吧。。。真相是他们（比如这本书的作者）好像在一个委员会里，这个委员会专门研究C++，包括观察像我这样的C++程序员，然后出一些指导或者为了我这样的程序员改进C++。。。

Template C++不算是难，固然写出第一个template的class或者是template的function很难，但是只要学会了，那么他其中的规则还是很简单的。这本书只用了一个章节去讲什么template编程，除了在有隐式构造函数的时候需要稍微注意下之外，确实是没有什么需要特别注意得了。

而C++ with STL，这本书的作者好像有一本单独的书讲，为了卖钱，这本书其实没怎么涉及。。。

综上所述呢，这本书就是介绍了C++所有的“坑”，并且告诉你怎么去避免。想想波音737 MAX8的那个解释飞机会自己往下俯冲到底的说明书，对对，就是类似的东西。如果你不想~~在空中绝望得和飞机进行搏斗~~每个夜晚和C++艰难的搏斗，那么我十分建议去读一下这本书。

下期预告：还没想还嘿。
