本文共 1845 字,大约阅读时间需要 6 分钟。
为什么C++比别的语言难学这么多?其实这基本上是因为C++他爹Bjarne Stroustrup说过的一句话“我特别讨厌语言的设计者把自己的喜好强加给用户”(看向go)。结果C++为了不限制你的想法,于是也就变成了现在这个样子——包含若干范式,大概有说到这里,大家大概都明白精通C++大概是个什么感觉了吧——大丈夫能屈能伸。
C++是一个典型的多范式语言,不过他概括的还不够全面。C++是四类范式的组合体:过程式/结构化,面向对象,代表Lambda的模板(元编程),以及作为一个Markov Machine也具有图灵完备性的宏。此外还有一个我不知道怎么归类的type rich programming。
在这四类范式之外,还有各种各样的奇技淫巧。这里我说的奇技淫巧,并不是指Boost.MPL或者Loki那样的,那些其实都是C++基本范式中的衍生做法,都是最规矩的。 这里的奇技淫巧,给大家举两个例子。比如在C++03时候,还没有explicit type cast operator,那要安全的提供operator bool,还要利用member function pointer的特殊转化规则;又比如BOOST.AUTO在VS2008上利用了一个Bug完成的实现。奇技淫巧的问题在C++11消除了一部分,但是又增加了一些,比如说左值/右值引用的折叠,就是不是一个逻辑上自然的、而是设计后的产物。 此外还有一些坑。比如说重载-多态-名称掩藏、虚继承、指针的转来转去导致的问题什么的。 这些都还是最最基本的常识性问题。要是应用到生产中,就会变得更复杂。什么时候用继承,什么时候用模板,什么时候用多态,什么时候用宏。好在有一些前辈已经给我们淌了路,比如说Shutter,比如说Meyes。熟读 6E(Effective C++,More Effective C++,Exceptional C++,More Exceptional C++,Exceptional C++ Style,以及Effective STL),这大概是进阶的唯一阶梯。 再往上你学C++就没啥用了。多学一学其他语言,例如Haskell,ML,Javascript,C#,自己做一做编译器,了解一些语言设计上的常识,读一些形式化系统的论文,都会帮助你对C++这么一个复杂而丑陋的语言产生更多的同情。 当你开始觉得:C++的设计者真可怜;埋怨英文标点实在太少并开始同情BS;决定自己卷起袖子撸一个的时候,大概你就算是精通C++了。 当然撸的好,就是Rust;撸的不开心,那就是Go了。转载地址:http://ptfgi.baihongyu.com/