C与C++——使用C语言的优势

7

C++,顾名思义,是C的超集。事实上,大多数C代码都可以在C++中运行,而C无法运行C++代码。

与C相比,C++有几个优点-例如

  • C语言中无法隐藏数据
  • C较低级别(意味着更难理解和编写-这意味着更多的错误)
  • C不允许函数重载
  • C不支持异常处理
  • 您可以在C ++中使用结构内部的函数,但不能在C中使用

这个列表肯定可以更长 - 但现在我的问题来了:与C ++相比,C-langauge有任何优势吗? C有什么优于C ++的地方? C是否具有C ++缺少的任何内容?

我对此一无所知 - 但C是否可能比C ++稍微快一点,因为它具有较少的指令集?低级语言可能需要处理器更少的指令。


12
它并不是C的超集。它的名字意味着比C多1(除非C是其类型的最大可表示值)。 - Joseph Mansfield
7
它的名字表明,在评估后,C比C++多一个。 - bennofs
2
这个问题太过宽泛,我想给你一个答案,但不知道从哪里开始。 - Filipe Gonçalves
3
我不太认为C语言更低级。如果需要,C++也可以深入细节。 - chris
4
C++不是C的严格超集。有些合法的C程序在C++中是非法的,而有些合法的C程序在C++中具有不同的语义也是合法的。编写既符合C又符合C++的代码是可能的,并且不太困难,但很少存在这样做的好理由。 - Keith Thompson
显示剩余11条评论
1个回答

10

简单来说,C和C++是两种不同的编程语言。

C++,顾名思义,是C的超集。

不,这不是正确的。C++不是C的超集。

有没有C语言相比于C++的任何优势? C语言有什么比C++更好的地方吗?
- 在C中静态初始化是安全的,但在C++中不是,因为在C++中静态初始化可能会导致依赖于其他变量已被静态初始化的代码运行。它还可能导致在关闭时运行清理代码,你无法控制其顺序(析构函数)。 - C让你更好地控制代码执行时发生的事情。当读取查找时,很容易解密哪些代码正在执行以及何时只是重新启动内存或执行基本操作。 - C支持堆栈上的可变大小数组。这比在堆上分配要快得多。(C99特性) - 没有名称混淆。如果你打算阅读生成的汇编代码,那么这样做会更容易。在尝试优化代码时,这可能很有用。 - 事实上标准的应用程序二进制接口(ABI)。由不同编译器生成的代码可以很容易地组合。 - 更容易与其他语言进行接口。许多语言都允许您直接调用C函数。绑定到C ++库通常是一项更加复杂的工作。 - 编译C程序比编译C ++程序要快,因为解析C比解析C ++要容易得多。 - 在C ++中不能安全地使用变长参数。在C中它们也不完全安全。但是,在C ++中它们更加安全,以至于它们在C ++编码标准(Sutter,Alexandrescu)中被禁止使用。 - C需要较少的运行时支持。使其更适合低级环境,例如嵌入式系统或操作系统组件。 - 在C中进行封装的标准方法是前向声明一个结构体,并仅允许通过函数访问其数据。这种方法还创建了编译时封装。编译时封装允许我们更改数据结构成员而无需重新编译客户端代码(使用我们的接口的其他代码)。另一方面,使用类进行封装的C ++的标准方法(使用类)需要在添加或删除私有成员变量时重新编译客户端代码。

2
尽管我同意前半部分(关于C和C++的不同之处),但这并没有回答问题。 - stefan
3
是的,它非常广泛,这就是为什么它被关闭为“过于宽泛”的原因:这恰好是您所做的相反之处,您提供了一个没有实际回答的占位符,基本上只是在说“不要理会这个问题”。 - Lightness Races in Orbit
4
"编译C程序比编译C++程序快,因为解析C语言比解析C++语言容易得多。" 您是否曾经进行过测量?我严重怀疑您能否提供一个实际证明这种说法的文件。 - stefan
6
@haccks,你提到的许多“优点”都是你的个人意见或无法证明的。 “C支持在堆栈上使用可变大小的数组。这比在堆上分配要快得多。(C99 特性)” 但是堆栈的大小是有限制的,所以这真的是一个优点吗? - Miguel
3
很遗憾这个问题被搁置了,我不明白为什么我的问题会被严重地贬低,最多只有-3。而你的答案应该得到更多的赞扬!非常好的回答!!!@haccks - 谢谢!!! - Björn Hallström
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接