其实根本原因是——“没得选”。
1、一个是面向对象目前仍然是解决大规模软件开发的技术,而C++在面向对象编程语言方面历史足够悠久,能解决不少实践中的实际问题,在面向对象的语言群体中,相对来说还不错。
2、如果要求一个语言在既要保证高性能,又要较高抽象表达能力方面,还要有足够成熟度,这几点筛下来就没几个了,如果再要求对软件各方面都有足够强的精细控制和定制能力,这基本就没得选了。
3、C++的生态虽然极其碎片化,到处都是轮子,但是好在历史悠久,各种犄角旮旯的轮子都有。这也意味着,只要努力找,总能找到最合适的轮子。语言生态达到这种程度的,就没几个。
4、很多遗留系统是ASM、FT、C、C++等语言写的,或者其遗留系统的软件接口采用的是C接口。此时,相对来说,而在集成这些老系统时,工作量最小、风险最小的语言是C++,毕竟就没见着那个语言能直接在顶层设计上直接宣称对C兼容。且确实经历过实践检验的就更少。
5、有一些比较优秀的特性,比如模板,这东西虽然很丑陋,但是,目前已经是唯一经历过实践检验的且足够完备的依赖类型系统了。
C++语言在诸多细节方面总是存在这样那样的问题,特别是C++的各种特性都有各种例外,这是导致C++难以做到精通的原因。但一旦到了具体实践应用方面,哪怕C++看起来好像样样不行,但是综合多个方面因素一起决策时,最后往往会发现,好像C++又样样行。所以,C++总是能很意外地出现在最终的筛选列表上。
总结来说,我觉得就一句话:C++这个语言没有明显的实践上的短板,很多时候“没得选”。
https://www.zhihu.com/question/594374093
--
FROM 124.72.110.*