为何C++还没能取代C
为什么C++还没能取代C?
既然面向对象的思想这么方便有效,而且C的基本特性C++都包含了,不要说什么C++效率不如C,C++占内存什么的,仅就构建软件而言,为什么C++还没有取代C?
------解决方案--------------------
1. 各种语言有各种不同的特点。
2. 理论上说,C++是基本上可以取代C的,包括写嵌入式、操作系统之类的软件。但实际中,接近底层的软件,大家还是倾向用C来写,这里有一个习惯的因素,也有C++在不断发展的因素。
3. 类似地,在C中可以嵌入汇编代码,但是C也没有完全取代汇编;另外一个事实,C连Fortran也没有取代,在数据密集型的计算中,Fortran比C的效率要高很多,所以到目前为止,高性能的数值计算,仍然是Fortran的天下。
------解决方案--------------------
记不得哪位C++大牛在哪本学习C++的书的前言里面说过
“用C语言1000行源码能完成的工作千万不要用C++重写!”
C++只是一种面向对象的编程思想。
再抽象的编程语言,最后不都变成汇编代码了吗?我们完全可以说汇编语言是面向对象、脚本化、动态化、泛函化、并行化、分布化的语言。
做个可能不太恰当的比喻:
人想让狗帮忙逮只兔子,可是人说话狗听不懂,于是人发明了一种介乎人言和狗语之间的语言,即口令。
人想让电脑帮忙做计算,可是人话电脑听不懂,于是人发明了一种介乎人言和汇编机器码之间的语言,即C语言。
人对狗的口令得让人容易学、也得让狗容易懂。
C语言同样得让人容易学、也得让电脑容易懂。
相比之下C++、Java就是人学得费劲、电脑也经常闹不懂。
------解决方案--------------------
因为C++的面向对象之类的特性需要大量使用new、delete这样的自由存储区操作,但是对于像操作系统、驱动程序开发什么的,根本就没有可以随意使用的堆让你来做,因为它们的内存访问时限制比较多。比如Linux核心来说,如果连内存分配器都没有,你如何new、delete呢?尤其是想虚函数表什么的,这些都需要在内存中开辟额外的地方去存放,而且因为编译器自己实现的缘故很难控制,所以在很多地方C++是无法胜任的。
------解决方案--------------------
写应用的话,毫无疑问C++优于C.
但是在嵌入式领域、特别是嵌入式系统的驱动及操作系统方面,C++很难取代C.
1. 写嵌入式操作系统的老家伙用的是C,他们觉得没有必要用C++重构操作系统;
2. 你的前辈给你留下一大堆C代码,当你跟老板说应该用C++重构的时侯,他会叫你滚蛋;
3. 编译器开发商对嵌入式C++的支持并不好,要么没有,要么不好;
既然面向对象的思想这么方便有效,而且C的基本特性C++都包含了,不要说什么C++效率不如C,C++占内存什么的,仅就构建软件而言,为什么C++还没有取代C?
------解决方案--------------------
1. 各种语言有各种不同的特点。
2. 理论上说,C++是基本上可以取代C的,包括写嵌入式、操作系统之类的软件。但实际中,接近底层的软件,大家还是倾向用C来写,这里有一个习惯的因素,也有C++在不断发展的因素。
3. 类似地,在C中可以嵌入汇编代码,但是C也没有完全取代汇编;另外一个事实,C连Fortran也没有取代,在数据密集型的计算中,Fortran比C的效率要高很多,所以到目前为止,高性能的数值计算,仍然是Fortran的天下。
------解决方案--------------------
记不得哪位C++大牛在哪本学习C++的书的前言里面说过
“用C语言1000行源码能完成的工作千万不要用C++重写!”
C++只是一种面向对象的编程思想。
再抽象的编程语言,最后不都变成汇编代码了吗?我们完全可以说汇编语言是面向对象、脚本化、动态化、泛函化、并行化、分布化的语言。
做个可能不太恰当的比喻:
人想让狗帮忙逮只兔子,可是人说话狗听不懂,于是人发明了一种介乎人言和狗语之间的语言,即口令。
人想让电脑帮忙做计算,可是人话电脑听不懂,于是人发明了一种介乎人言和汇编机器码之间的语言,即C语言。
人对狗的口令得让人容易学、也得让狗容易懂。
C语言同样得让人容易学、也得让电脑容易懂。
相比之下C++、Java就是人学得费劲、电脑也经常闹不懂。
------解决方案--------------------
因为C++的面向对象之类的特性需要大量使用new、delete这样的自由存储区操作,但是对于像操作系统、驱动程序开发什么的,根本就没有可以随意使用的堆让你来做,因为它们的内存访问时限制比较多。比如Linux核心来说,如果连内存分配器都没有,你如何new、delete呢?尤其是想虚函数表什么的,这些都需要在内存中开辟额外的地方去存放,而且因为编译器自己实现的缘故很难控制,所以在很多地方C++是无法胜任的。
------解决方案--------------------
写应用的话,毫无疑问C++优于C.
但是在嵌入式领域、特别是嵌入式系统的驱动及操作系统方面,C++很难取代C.
1. 写嵌入式操作系统的老家伙用的是C,他们觉得没有必要用C++重构操作系统;
2. 你的前辈给你留下一大堆C代码,当你跟老板说应该用C++重构的时侯,他会叫你滚蛋;
3. 编译器开发商对嵌入式C++的支持并不好,要么没有,要么不好;