我有一次用反编译程序,打开了一个C++写的程序,反编译得到的汇编语言和源码一对照,对应的非常好。C++写的越像C,这种对应程度越高。
C++上限很高,它允许你按照计算机的思路去处理一个任务。当然下限也很低,因为很多现代语言有的东西,它都需要你额外操心。
牛人可以写出来执行效率很高的程序,菜鸟可以写出来屎得一塌糊涂的程序。
就拿内存管理来说,在C++中使用new不delete是新手常见的错误。然后C++提供了智能指针,但并不好用。很多人智能指针也用不明白。尤其是很多库自己提供了内存管理的方案,与智能指针又不兼容。拿qt来说,只要你继承自QObject,又指定了父对象,那么父对象在自己生命周期结束时就会把子对象内存一起释放掉。你用了new,可以不用delete。在指定父对象时只接受裸指针,不接受智能指针中返回的裸指针,因为父对象的内存管理和智能指针内存管理是冲突的。
在C++中,光是内存管理这个事情,很多库都在重复造轮子。
虽然C++很难用,缺点也很多,但它始终在编程界有自己的一席之地。因为它有一座很大很大的祖传屎山,可能其它语言的祖传屎山加一起都比不过它。
前面说了,C++上限很高,所以历代编程牛人用它实现了很多算法,又经过很多人的不断优化,这些算法执行效率非常高。这是非常有诱惑力的。很多语言靠封装C/C++的库活着呢,比如python。
你不用担心C++的前景,就是稳如老狗(它也确实是条老狗)。不会昨日重现,大红大紫。更不会忽然暴毙,销声匿迹。
Qt的前景和C++是类似的,大红大紫肯定不可能,但也不会死。它也有祖传大屎山啊。比如wps就是用Qt写的,号称3000万行代码。能用其他语言重写吗?承担不起那个成本啊。现在wps是国产操作系统里为数不多用着还可以的软件了。
只要C++不死,Qt永远有自己的自留地,饿不死也撑不死。