大家为什么不用C++写操作系统啊,而是只用C

2024-11-28 19:47:11
推荐回答(5个)
回答(1):

因为现在普遍使用的系统都是在C++大规模使用以前就已经成型的。当然,C++比C方便是真的,但是写系统的话绝对不可能去用STL。(2016年更新:真不知道当年怎么想的STL不能拿来写系统...)

----

C比C++效率高的观念的确很奇怪,C++又不是Java。C++和C的区别仅仅是写法上的。

不明白的事情不要臆断... 相同水平的编译器编译出来C和C++效率也是相同水平的。编译型的语言不可能一个比另一个执行效率低,区别都是语法层面的。(2016年更新:因为语法限制,很多功能用C语言要付出相当大的可读性代价才能达到C++的效率,所以可以粗略视为C++的效率是高于C语言的)

当你把参数传递给函数的时候,那已经是对象编程了。程序是脱离不了对象的,所谓面向对象只是从对象角度出发去考虑。 Windows驱动层虽然是C语言的,但是是典型面向对象写法(第一个参数是操作对象、虚函数表)。

----

相对于更底层的语言效率低?汇编写的程序费牛劲优化也不一定能比高水平的C++编译器编译出来的代码效率高。什么东西自己没弄过不要乱说。

----

因为把以前用C写的东西换成C++重写是不理智的。系统原本的面向对象实现往往是异化的版本,比如windows底层的虚函数表不在结构最前面,乃至UI里metaclass的窗口类。这些没办法和C++的面向对象兼容。系统层一般也没有要用泛型这类非C++不可的地方(2016更新:如果真写一个新系统,不上模板属于自虐)。事实上,至少windows新的上层的大部分实现本来就是C++写的了。

----

你首先先要明白 C++和C的决定性区别不是面向对象,是泛型和名空间。可这两个都是近乎预编译层的东西。

回答(2):

操作系统 对效率要求很高 c++是不能胜任的

即使是c语言有些情况也是难以做到

因此操作系统多是用 c 和汇编 共同开发的

c++的低效是相对底层处理上的
若果用c++不用面向对象的编程方法 那c++就是c
然而若用面向对象的方法 相对于c
c++的效率一定是上不去的

c++在面向对象语言中效率是其他面向对象语言难以比拟的 它的低效只是相对于更底层的语言

事实上 windows 重写过多次了
windows 操作系统至今 没有改用c++开发 为什么
linux 似乎也没有人用c++重写过

“事实上,至少windows新的上层的大部分实现本来就是C++写的了”这句话有待考证吧

"汇编写的程序费牛劲优化也不一定能比高水平的C++编译器编译出来的代码效率高"

怎么没有人用c++去写直接与硬件打交道的部分?

回答(3):

首先,C++(CPP)的那些高级特性是必须在底层核心完成之后才能写的,你不能直接写,否则没有系统核心支持哪些UI和STL都不能用。
C++的运行效率和C相差不大,因为CPP在写底层的时候,补丁的部分(面向对象的部分或者说高级部分特性)特性完全无法发挥,只能像C那样写代码,但是并不是说CPP就不能写操作系统,CPP有ABI和指针和嵌套汇编的能力,一样可以直接操作底层访问底层,C语言相对于CPP的优势只是在嵌入式开发也就是单片机上,因为单片机很小内存,只有4-16K这样,所以C语言就有发挥的机会。
CPP写操作系统是有优势的,比如CPP有智能指针,作用域指针,有内存安全特性和类型安全,也有线程锁这些新加入的特性,如果能用在底层开发上,那是比C还要安全和稳定的。C语言底层也是一堆指针乱飞,结构体在模拟类的表现,其实半斤八两,不过你不要用抽象去和机器交流,应该用面向过程的思想。否则代码隐晦难懂,其他和你合作的人会抱怨你在写什么Wan意。比如linus

回答(4):

c效率高!更稳定!更安全!

回答(5):

写操作系统的那会还没有C++