代码之家  ›  专栏  ›  技术社区  ›  Ryan Guill

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

  •  9
  • Ryan Guill  · 技术社区  · 16 年前

    对于你们两个都有经验的人来说,主要的区别是什么?对于新手来说,哪一个更好学?是否有可能选择C,但在其他情况下你会选择C++?这是一个使用最佳工具的工作,还是一个明显优于另一个。我知道C++是C的一个“增强”,但是它是在83中创建的,还没有完全取代C,所以必须有更多的东西。

    我知道这个问题是主观的,我不想发动任何宗教战争,所以请尽量客观。明确优势、劣势和比较。

    7 回复  |  直到 16 年前
        1
  •  14
  •   Johannes Schaub - litb    16 年前

    C是纯过程语言,C++是 多范式 语言。它支持

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

    除此之外,C++在很大程度上保持了与C代码的兼容性,但也存在一些差异。这些可以在C++的附件D中读取,连同原因和可能的固定使C代码有效的C++代码。

        2
  •  8
  •   user54650    16 年前

    C++是C的超集99%,它在语法上有点严格,在事物变化方面有一些微小的差别。

    最大的区别是C++试图实现面向对象。有对类的本机支持。

    C++中还有一些其他的好处:模板、流运算符、按引用传递(比传递指针少一点混乱)。

    在C++中你失去了什么?它缺少了很多人使用C进行的一些最低级的黑客攻击。我一点都不记得它们,但是我从来没有听到过任何好的理由来诱使编译器去做你想要的事情,除了把效率提高到10%以外。

        3
  •  6
  •   Sean Edwards    16 年前

    C++,正如它在你的问题中所暗示的那样,是对C的增强,它是一个显著的增强。(我用“增强”这个词指的是功能,而不是功能。)不过,增强的意思是增长。C++通常适用于更大的程序。应用程序,真的。这是一种高性能的语言,但它很强大。

    另一方面,C用于内核和驱动程序编程是有原因的。它很古老(古老?),小,如果你很聪明,尽可能快,不用自己编写汇编程序。显然,折衷的是特性。C没有很多像类和模板这样好的大的概念,像我这样的C++程序员是理所当然的(没错,完全有罪)。

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

        4
  •  5
  •   user21714    16 年前

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

    专注于C基础,比如字符串、函数指针,以及如何使用和管理内存。当您转换到C++时,这些都将转移。最重要的是,确保您真正地摸索指针,它们与内存的关系,以及指针和数组之间的关系。我想说,作为一个全面的程序员,理解这些东西是必需的。

    然后,去C++学习OO模型、模板等等。尝试从C++开始做一切都可以有点压倒一切。

        5
  •  3
  •   Jason Baker    16 年前

    我会提出这样的论点:在大多数情况下,你最好用C++来代替C。如果你不想使用C++,那么你不必使用所有复杂的特性。对于大多数情况,C++添加了一些非常有用的东西:

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

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

    也许如果你正在做内核黑客或嵌入式系统开发,你应该使用C,但是,否则,我建议C++。

        6
  •  2
  •   ChrisW    16 年前

    对于你们两个都有经验的人来说,主要的区别是什么?

    C是一个子集,C++是一个超集。C++包含支持面向对象编程(例如“多态性”)和许多其他特性的特性。

    对于新手来说,哪一个更好学?

    C更容易(因为它是一个较小的主题),C++是更好的(因为它更强大,包括C,并且在我的经验中,C++中的作业编程比C中有更多)。

    是否有可能选择C,但在其他情况下你会选择C++?

    在C平台上,在C平台上,我选择C来代替C,而不是C++(即在一些嵌入式设备上)。

        7
  •  2
  •   Kylotan    16 年前

    你可以使用C++,也可以使用C。一般来说,如果你的平台上有一个C++编译器,没有理由不使用它。C是一个非常好的语言,但是C++增加了很多额外的内容,而不会失去你的能力,所以它几乎永远是你所选择的语言。