C和C++是不同的语言,我们知道blababla.
但如果这些语言不同,为什么仍然可以使用malloc或free这样的函数?我确信C++有各种各样的尘土飞扬的东西,因为C,但是由于C++是另一种语言,为什么不删除这些东西,使它变得不那么臃肿,更干净清晰?
是因为它允许程序员在没有OO模型的情况下工作,还是因为某些编译器不支持C++的高级抽象功能?
Joh*_*itb 23
因为C++不会像现在这样与C兼容,所以C++会死掉.除了粉丝之外,没有人会喜欢C++,如果它与C不兼容(我知道我可能会因此而被投票.就这样吧!).
Kos*_*Kos 16
关于"为什么没有"纯粹的"C++语言......好吧,至少有一个.最流行的一个叫D,它很棒,设计精良,功能丰富,编码愉快,你可以使用C语言图书馆用它.
啊,几乎没人用它.:)
直接原因是C++还不足以让人们有充分的理由将数百万行遗留代码移植到更现代的代码中,正如你所描述的那样,像D这样的"纯粹"语言.
它的设计使您可以移植C代码并直接将其编译为C++代码,并允许对现有代码进行增量升级.如果C++没有malloc/free,你就无法将现有的C代码编译成C++,因为你需要支付一些可怜的傻瓜来查找所有malloc调用并替换它们,这很昂贵.
大多数操作系统都公开了一个C API,所以如果你想使用C++进行系统编程,你需要一定程度的C互操作性.
将C标准库合并到C++标准库中具有历史和实践的原因:C++作为C的扩展开始其生命,并且C标准库已经可以使用了.排除部分库(如malloc和free)是愚蠢的,因为有更多惯用的C++替代方案:如果你想做愚蠢的事情,C++会给你这样做的权力.
对于实际的语言语义,同样适用 - 但程度较低 - 并且由于向后兼容性,C++永远不会完全摆脱其C语言遗产.
C++被设计为与C兼容 - 事实上它最初是C的超集,但C语言已经改变以打破它.
这意味着可以从C++代码调用C库 - 包括C运行时库.它并不意味着它是一个好主意,这样做!
如果你想要一个"纯粹的"C++,那么你可以在不调用任何C库的情况下使用C++.
[正如其他人说的那样,自从我开始输入这个内容之后:C++的设计和演变是一个开始阅读背景的好地方.]