读 S. Meyers 之 《More Effective C++:35个改编程与设计的有效方法》
S. Meyers, 侯捷. More Effective C++:35个改编程与设计的有效方法. ISBN: 978-7-121-12570-6
这本书的作者就是上次介绍的 S. Meyers,这本书也就是上次介绍的 Effective C++ 的续集。其实这两本书本可以写在一起,但作者还是把他认为比较“高级”的部分独立出来写了两本书。一本仅涉及 C++ 语法本身,也就是这一本;另一本则专门讲 STL,那本我们下次再聊。
这本书中关注的重点仍然有约一半是和指针有关的。指针是 C 语言的精髓,它本质是汇编语言寻址机制的抽象,但到了 C++ 中指针的地位就变得很尴尬。很多时候你不得不用指针,但 C++ 中的类机制让这一切变得很复杂。为了让这一切变得易于使用, C++ 又引入了 smart pointers 之类的机制用于取代指针。所以现在 C++ 里既有基础的指针,又有 smart pointers,基础指针是相当不安全的, smart pointers 则相对安全些。 C++ 的最新标准则鼓励人们不要使用基础的指针,尽量使用 smart pointers 等机制代替。问题在于,很多初学者学到基础指针就觉得自己学会了,根本不知道还有 smart pointers 一说。于是,混乱且不安全的 C++ 代码到处都是。
除了指针,这本书还对一些其他的 C++ 高级特性做了说明。这些特性放到 C++ 里算是高级,但到了其他现代化设计的语言中,只能算是基础。例如异常处理机制。这基本是目前设计的语言的标配,但到了 C++ 里它不仅加入得很晚,而且为了兼容 C++ 之前设计的语法垃圾堆,弄得非常复杂。
还有 RTTI (Run-Time Type Identification),这个功能在 Python 或者 C# 之类的语言里就是一个非常自然的功能,在 Rust 中则是一个清晰独立的包。但在 C++ 中就是语言标准里让人感觉非常难受的一部分。
总之就是,确实很多现代化的编程功能 C++ 都有,而且可能不少还原源自 C++。但目前看来, C++ 对现代化编程功能的支持还是远远不够。而且已经支持的功能在 C++ 里用起来也不舒服。这一切的前提还是你用的是最新标准的 C++。如果你痴迷于几十年前的旧标准,那么连这些优势都没有。
求点赞,求收藏,求分享