C和C ++之间有什么区别

时间:2009-03-12 21:56:08

标签: c++ c

我知道C ++有对象的概念,但C没有。我也知道几乎所有人都知道C适合K & R,但C ++库要复杂得多。但是必须有其他重大差异。

C和C ++之间的主要区别是什么?

10 个答案:

答案 0 :(得分:24)

C ++语言表明它们是相同的:

int C = 0;
assert(C++ == C);

答案 1 :(得分:24)

查看Stroustrup的常见问题here,具体来说:

C和C ++有什么区别?

  

C ++是C的直接后代   保留了几乎所有的C作为子集。   C ++提供更强大的类型检查   比C和直接支持更广泛   编程风格范围比C.   从某种意义上说,C ++是“更好的C”   它支持编程风格   使用C进行更好的类型检查   和更多的符号支持(没有   效率损失)。在相同的   感觉,ANSI C是比K& R更好的C.   C.此外,C ++支持数据   抽象,面向对象   编程和通用编程   (参见C ++编程语言(第3版)   版)“;附录B讨论   兼容性问题可用   下载)。

答案 2 :(得分:15)

我认为你回答了自己的问题:课程

它是一个完全不同的设计范例。我认为混乱是因为许多人开发的C ++程序基本上都是C程序,甚至没有意识到。

在其创作者的话语中,Stroustrup:

编辑:添加了一些其他有趣的东西

答案 3 :(得分:7)

简而言之,C希望成为一种“便携式汇编语言”。它使事情变得简单,让你做几乎直接映射到底层硬件的东西,并没有提供很多高级抽象(你有功能和....就是这样)

C ++试图成为一切。高级语言,低级语言,面向对象语言,多范式语言,系统编程语言,嵌入式编程语言和应用程序开发语言。

除了一些共享语法之外,这两种语言并没有太多共同之处。一个C程序可能只用很小的改动编译为C ++,但它与为该语言编写的“适当的”C ++代码没有任何共同之处。

答案 4 :(得分:7)

这是一个显示c和c ++之间“不兼容”的网站:

http://david.tribble.com/text/cdiffs.htm#C++-vs-C

实际上有很多领域c和c ++分歧(除了类,模板,异常等)。

就主要差异而言,这里列出的内容很好:

  • 匿名工会
  • 构造函数和析构函数
  • 例外和try / catch块
  • 外部功能联系(例如,extern“C”)
  • 功能重载
  • 会员职能
  • 命名空间
  • new和delete运算符和函数
  • 运算符重载
  • 参考类型
  • 标准模板库(STL)
  • 模板类
  • 模板功能

答案 5 :(得分:3)

模板是另一个很大的区别(除了类/对象)。模板支持例如typesafe泛型容器类型(它们的第一个用例)和(bastardized)lambda表达式(boost::lambda)。

C ++是一种比C语言更大的语言(不仅仅是库)。

答案 6 :(得分:3)

这个问题没有简短的答案。
一般来说C ++支持:
- OOP范例;
- 通用程序;
- 模板乙醇程序设计;
- 抽象数据类型;
- 新的图书馆和标准支持功能范式的元素;
- 使您的计划最可支持的其他工具;
- 你也可以编写类似C风格的程序,但使用C ++ compiller;


但纯粹的C - 比C ++快一点,更低级别。

答案 7 :(得分:3)

C ++与C相比的另一个特性是以throw ... catch的形式进行异常处理。

答案 8 :(得分:3)

C ++不仅仅是C类。 C ++中还有许多其他概念,如模板,函数和运算符重载,异常以及此处已提到的许多其他概念。这使得C ++非常强大和灵活,但也很难学习。并不是单个概念难以理解,而是它们的总和以及它们如何一起玩。看一下boost,看看C ++可以做些什么。我想这需要很长时间才能理解引擎盖下发生了什么,这在C的情况下非常清楚。

或者简而言之:C ++不仅仅是带有类的C,或者换句话说C ++远不是Java加上内存管理。

答案 9 :(得分:2)

C++ for C programmers的两部分的第一部分中,列出了一些非OOP差异:

  
      
  • 函数的默认参数
  •   
  • 功能重载
  •   
  • 您可以在代码中的任何地方声明局部变量,而不仅仅是在函数的开头(也是C99特性)
  •   
  • 参考文献,如int& x
  •   
  • 一般的正确性
  •   
  • 命名空间
  •   
  • 内置布尔类型bool,包含truefalse个关键字(同样在C99中通过stdbool.h)
  •   
  • 内联关键字和关联的怪癖,包括隐式内联和自动内联
  •   
  • 比C
  • 更大的标准库