C++的独特

作者:李建忠
链接:https://www.zhihu.com/question/38101493/answer/123636569
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相对其他语言,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 hardware2. Zero-overhead abstraction3. Stability and portability最后,推荐一下,C++ 之父Bjarne Stroustrup 将出席 10月28-29日在上海举办的“2016 C++及系统软件技术大会 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++的程序员很难理解的吧。
C++ 难在哪?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值