【问题标题】:C vs C++ - advantages with c-language [closed]C vs C++ - c语言​​的优势[关闭]
【发布时间】:2014-01-19 09:05:43
【问题描述】:

C++,顾名思义,是C的超集。事实上,C++可以运行大部分C代码,而C不能运行C++代码。

与 c 相比,c++ 有几个优点——例如

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

这个列表肯定会更长——但我的问题是:与 c++ 相比,c 语言有什么优势吗?有什么比 c 更好的东西吗? c 有没有 c++ 缺乏的东西?

我对此一无所知 - 但由于指令集较少,c 可能比 c++ 稍微快一点吗?低级语言可能需要更少的处理器指令。

【问题讨论】:

  • 它不是 C 的超集。它的名字暗示它比 C 多 1(除非 C 是其类型的最大可表示值)。
  • 顾名思义,经过评估,C比C++多一个:)
  • 这个问题太笼统了,我想给你一个答案,却不知从何说起。
  • 我也不会说 C 的级别要低得多。如果您需要,C++ 也可以深入了解细节。
  • C++ 不是 C 的严格超集。有有效的 C 程序是无效的 C++,也有有效的 C 程序是不同语义的有效 C++ 程序。编写具有相同语义的有效 C 和 C++ 代码是可能的,而且难度不大——但很少有充分的理由这样做。

标签: c++ c


【解决方案1】:

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

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

没有。这不是真的。 C++ is not a superset of 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++ 的标准方法(使用类)需要在添加或删除私有成员变量时重新编译客户端代码。

【讨论】:

  • 虽然我同意前半部分(关于 C 和 C++ 蜜蜂不同),但它并没有回答问题..
  • 是的,它很大,这就是为什么它被关闭为“太宽泛”:与 you 所做的完全相反,即给出一个占位符非答案,基本上只是说“不要理会这个问题”。
  • 我希望您不是说C 程序在构建后运行速度比C++ 程序快...
  • "编译 C 程序比编译 C++ 程序要快,因为解析 C 比解析 C++ 容易得多。"你有没有测量过?我严重怀疑您是否可以提供一个实际存在的文件。
  • @hacks,您列出的许多“优势”都是您的意见或无法证明。 “C 支持堆栈上的可变大小数组。这比在堆上分配要快得多。(C99 特性)”是的,但堆栈的大小是有限的,所以这真的是一个优势吗?
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 2011-03-10
相关资源
最近更新 更多