C++ 难在哪？
相对其他语言，C++是难了几个数量级，首先在于语言的目标： 1. 足够的接近底层，从而追求极致的性能操控 2. 支持多范式编程，来管理不同维度的复杂性 这两个目标在某种程度上是有些矛盾的， 很多语言在追求抽象性的时候，往往要牺牲性能。在追求性能的时候，往往要牺牲抽象性（暴露实现细节）。 而C++ 是野心最大的语言，试图两者都追求，但这个代价就是需要提供给程序员足够的freedom来根据情况作设计tradeoff。 这个freedom在C++ 编程中有各种体现。 比如传參：Java中，传參很简单，依赖类型的不同就两种方式；但C++的 传参简单来说就有 传值、传引用、传指针。这其中每一种又有各种类型，如指针的指针，指针的引用.....再加上const修饰，又是各种变体.... 再拿内存管理来说，C++允许程序员很精细地控制，对象放在stack上、还是heap上。而绝大多数语言都是 类型直接决定了对象在heap还是stack上，程序员没有任何控制自由度。C++也允许程序员确定性删除 堆内存，即delete+ 析构函数，这又带来一系列复杂度...... 再拿面向对象来说，C++支持多继承，支持对继承设置不同的保护级别。对于多态，允许程序员控制哪些函数为virtual，哪些不为virtual.... 而大多数语言如Java，只支持单继承、只支持public继承，实例函数默认为virtual 还有很多很多地方C++有各种自由度。 个人经验，在每一个 细节技术feature，C++都提供了 至少3个 以上的options，而大多数语言只提供1个选择。  然后很多技术feature又有交叉组合的情况，那么feature A * feature B * feature C，假设每一种是3种options，那么就是27种。如果每一种是2种options, 也有8种。 所以，从可选择的freedom上来讲，C++比其他语言的复杂度至少在10倍以上。 所有这些，都是C++ 之父Bjarne Stroustrup 在设计之处就为C++定下的基调： 1. Direct access to hardware 2.  Zero-overhead abstraction 3.  Stability and portability 最后，推荐一下，C++ 之父Bjarne Stroustrup 将出席 10月28-29日在上海举办的“ Bjarne Stroustrup的演讲主题是：《What C++ is and what it will become》 ，除了Bjarne之外，还有C++大神Andrei Alexandrescu，Mike Spertus，侯捷，云风，张银奎等各路大咖到会，阵容很强大。 ================================================================ 再补充一下，C++对硬件操控的追求，所谓Direct access to hardware，也是其他语言所不能及的。其他绝大多数编程语言（比如Java、C#、Swift....）设计目标都是，通过足够的abstraction 让程序员focus在业务上，忘掉机器。 大多数非C++程序员， 程序写多了，就忘了computer system是啥了。 但C++语言，程序员必须拉回到Computer System层面的深入理解，memory, cpu, gpu, cache, disk, I/O...... 不一而足，这也是我们常常说C++是一门System-Level 的编程语言。 这种感觉大概是 非C++的程序员很难理解的吧。