C和C ++之间的主要区别是什么?你何时会选择其中一个?

时间:2009-01-14 14:19:10

标签: c++ c programming-languages

对于那些有经验的人来说,主要的区别是什么?对于任何一个新手,哪个更好学习?有没有你可以选择C的情况,还有其他你会选择C ++的情况?是使用最好的工具还是一个明显优于另一个的情况。我知道C ++是C语言的“增强”,但它是在'83创建的,并没有完全取代C所以必须有更多的东西。

我知道这个问题是主观的,我不是要开始任何宗教战争,所以请尽量做到客观。明确优势和劣势以及比较。

7 个答案:

答案 0 :(得分:15)

虽然C是纯过程语言,但C ++是一种多范式语言。它支持

  • 通用编程:允许编写一次代码,并将其与不同的数据结构一起使用。
  • 元编程:允许在编译时利用模板生成有效的代码。
  • 检查:允许在编译时检查某些属性:表达式具有什么类型?一个函数有多少个参数?每个人都有什么类型?
  • 面向对象编程:允许程序员编程面向对象,具有多重继承和私有继承等复杂功能。
  • 程序编程:允许程序员放置任何类的函数。结合ADL等高级功能,可以编写与某些类的细节分离的干净代码。

除此之外,C ++在很大程度上保持了与C代码的兼容性,但存在一些差异。这些可以在C ++标准的附录D中阅读,以及使C代码有效C ++代码的原因和可能的修复。

答案 1 :(得分:8)

C ++是99%C的超集。它的语法更加严格,在变化方面存在一些非常微小的差异。

最大的区别是C ++尝试面向对象。有本地支持课程。

C ++还有其他一些特权:模板,流操作符,传递引用(比指针传递更容易混淆)

你输入C ++会失去什么?它缺少许多人使用C的最低级别的黑客攻击。我不记得其中任何一个,但我从来没有听到任何好的理由来欺骗编译器做你想做的事情,除非作为一种将效率提高10%的方法。

答案 2 :(得分:6)

正如其名称暗示的那样,正如你在问题中所说的那样,C ++是C的增强。这是一个重要的增强。 (我使用术语'增强'来指代特征,而不是功能。)然而,关于增强的事情是它意味着增长。 C ++通常适用于更大的程序。应用程序,真的。它是一种高性能语言,但它很大。

另一方面,C用于内核和驱动程序编程是有原因的。这是古老的(古老?),小,如果你很聪明,你可以在没有自己编写汇编程序的情况下尽可能快地获得。显然,权衡是特征。 C没有像C ++程序员那样认为理所当然的很多像程序和模板那样的大软弱概念(是的,完全有罪)。

因此,为了更直接地回答您的问题,我的大多数高性能项目都是用C ++编写的。如果我正在开发类似驱动程序或嵌入式系统的东西,我期望使用C。

答案 3 :(得分:5)

如果您从未使用过要求您进行手动内存管理的语言,我会首先使用C语言。

专注于C基础知识,如字符串,函数指针以及如何使用和管理内存。当您转换到C ++时,这些都会转移。最重要的是,确保你真正了解指针,它们与内存的关系以及指针和数组之间的关系。我想说,要成为一名全面的程序员,需要了解这些事情。

然后,转到C ++并了解OO模型,模板等。尝试从一开始就用C ++完成所有事情可能会有点压倒性。

答案 4 :(得分:3)

我认为在大多数情况下,最好在C语言上使用C ++。如果您不想使用C ++,则不必使用C ++的所有复杂功能。 C ++添加的一些内容对大多数情况都非常有用:

  • 更强的打字。
  • 标准库中包含的字符串类。
  • 一个数组类(向量),可以根据需要增长,并为您处理所有内存分配和释放。

就我个人而言,我觉得即使你用它来编写类似C的代码(也就是程序性的,非面向对象的代码),使用C ++这三件事情也是值得的。

也许如果你正在做一些内核黑客攻击或嵌入式系统开发,你应该使用C,但除此之外,我推荐使用C ++。

答案 5 :(得分:2)

  

对于那些有经验的人,有哪些主要区别?

C是子集,C ++是超集。 C ++包括支持面向对象编程的功能(例如“多态”)和许多其他功能。

  

对于任何一个新手,哪个更好学习?

C更容易(因为它是一个较小的主题),而C ++更好(因为它更强大,包括C,根据我的经验,C ++中的编程工作比C中更多)。

  

是否有可能选择C的情况,以及您选择C ++的其他情况?

在目标平台支持C但不支持C ++的罕见罕见情况下(即在某些嵌入式设备上),我选择C over C ++。

答案 6 :(得分:2)

您可以使用C ++,也可以使用C语言。一般来说,如果您的平台有可用的C ++编译器,则没有理由不使用它。 C是一种非常好的语言,但是C ++增加了很多额外的功能而不会失去任何权力,所以它几乎总是选择的语言。