新项目的C与C ++之间的比较优势

时间:2011-01-21 07:20:12

标签: c++ c linux comparison

对于我在POSIX系统上编写的每个新的低级程序或库,我总是要从最初的决定开始:我是用vanilla C编写的,还是使用C ++?我喜欢每次做出相对明智的决定时都会想,但我想知道是否有一些我不知道的事情。

这不是哪个更好的问题,而是每个方面哪些方面更好?据推测,每个人都有引人注目的优势。在哪种情况下我应该选择一个而不是另一个?

例如,下面是我考虑的一些观点。 我还缺少什么?

偏爱C

  • 兼容性:实际上,每种语言和框架都有一些与C语言编写接口的机制。
  • 简洁:调试模板代码可让您更快地成长
  • 受欢迎程度:考虑所有您喜欢的应用程序,服务器,解释程序和其他工具。它们中的大多数都是用C语言编写的,尽管C ++在它们启动时可用。所有很酷的孩子都使用C.

偏爱C ++

  • STL :您当然可以 实现自己的RB树,快速排序算法或双链列表。但它可能不会那么好。
  • 模板:当然,它是一种伪装成语言功能的预处理器功能,但它确实很方便。
  • :C ++并不完全是小问题,但至少它不是花哨的汇编语言。
  • 兼容性:您仍然可以在C ++项目中使用C.

8 个答案:

答案 0 :(得分:8)

我认为你让它变得比实际更复杂。在表达自己的想法时,您最擅长哪种语言?如果不是,如果你是两者的初学者,使用C;否则,如果你擅长两个选择你的感觉。否则它几乎和刚开始一样无关紧要。

  

爱丽丝:请告诉我,我应该从这里走哪条路?

     

:这在很大程度上取决于你想去哪里

     

Alice :我不太关心。

     

:那你走哪条路并不重要。

     

Alice :只要我到达某处。

     

:哦,如果你走的时间足够长,你肯定会这样做。

答案 1 :(得分:5)

你忘了提到在C ++中有自动调用的析构函数,所以如果使用正确(RAII),你不必担心资源释放。另一个很好的功能是可以使错误处理更容易和更易于维护的异常。

答案 2 :(得分:5)

C ++只有比C更多的功能。这使它成为一种更复杂的语言。但使用这些功能的好处是你必须编写(并使用maintian)更少的代码。

您不需要使用模板,stl,异常,函数重载或任何C ++功能。但是如果您的问题只需要这些功能中的一个,那么如果您在C ++中执行此程序,您的程序将更具可读性,而不是在C中模拟缺少的功能。

答案 3 :(得分:2)

对于我自己来说,使用C只有两个理由。首先是如果你需要代码非常便携(将用作不同语言和/或操作系统的库),其次是你需要原始代码速度,这通常不是什么大问题,因为C ++通常只比c稍慢(不包括OO功能)。

我非常喜欢C ++的OO功能,如果使用得当,可以在开发应用程序时轻松生活。

答案 4 :(得分:1)

听起来你喜欢C over C ++。我也做。但是,易用性是编程中最重要的因素。 C ++有更好的字符串支持和更多的库,因此对于非平凡的项目,例如数据库访问和类似的东西,请使用C ++。如果你的目标是跨平台,也许想在较低的水平上工作,那么使用C.此外,无论如何,它们都是相同的。

答案 5 :(得分:1)

C ++在几乎所有方面都更好:更安全,更高效,在大型项目中效果更好......唯一的例外是当你与其他语言交互时你不能使用它。但在这种情况下,您仍然使用C ++并为接口部分添加一个小C层。

答案 6 :(得分:0)

在项目的早期阶段,C在C ++之上具有一些优势,它更简单,更容易,并且需要更少的设计决策。 然而,随着项目的发展,C ++和面向对象代码的优势实际上是:封装,抽象和信息隐藏。除非你打破封装,否则缺点通常是代码稍慢。

是的,也可以在C语言中编写类似C ++的内容,但它要复杂得多,难以维护。

答案 7 :(得分:0)

当我有选择时,我会使用C ++的子集。

  • 兼容性 - 没问题,您可以使用extern“C”来链接C库
  • 简单 - 避免模板,重载运算符以及混淆代码的其他C ++功能

你仍然可以获得课程和RAII的优势。