【问题标题】:What is the relationship between C and C++ (more technical approach)C和C++有什么关系(更多技术途径)
【发布时间】:2011-05-31 01:36:26
【问题描述】:

我正在阅读Relationship between C and C++ 并且有兴趣从更技术性的角度来看待这个问题。

例如,如果你想在 C++ 中使用线程,你会(假设是 Linux 平台)只使用 pthreads 吗?我知道 C++ 有 STL,而 Boost 库填补了很多空白……但是 C++ 程序员通常使用库来编写 C 代码吗?

我正在尝试决定是否值得学习 C++,因为我已经知道 C(诚然,学习 C 不是先决条件,可能是一个劣势),但我不确定 C++ 和 C 库等是如何结合在一起的一起……

【问题讨论】:

  • 放弃 C 和 C++,转而学习 D。

标签: c++ c relationship libraries


【解决方案1】:

直到 C++03,是的,您可能会使用 pthreads。当前的 C++11 草案在标准库中内置了线程,因此您可能会改用它(尽管它非常基于 pthread,因此它们之间几乎没有实际区别)。

不过,一般来说,是的,直接从 C++ 中使用 C 库很容易,并且在没有 C++ 库的情况下,通常使用它们。就此而言,即使有 C++ 库,有些人有时还是更喜欢使用 C 库。

【讨论】:

  • 这是一个要做出的决定,我在C++03代码中很少使用pthreads,而是boost::threadACE任务或QThread...所有这些(作为 C++0x 线程)可能在 POSIX 系统中使用pthread,或在非 POSIX 环境中使用其他实现。我不会说 C++03 人们使用 pthreads,有些人没有。
  • 即使在boost::thread 之前,您也不会在 C++ 中使用原始 pthread;你会编写自己的库来封装它。
【解决方案2】:

C 库经常在 C++ 中使用。有时它们会被包裹在更好的惯用 C++ 接口中,有时则不会。例如,许多围绕 C 套接字 API 的薄 C++ 包装器,但人们通常还是直接使用套接字。我一直在C++中直接使用各种POSIX函数。

不过,您确实需要确保您已经了解 C(尝试将 C++ 字符串直接传递给需要 C 字符串的 C 函数的新 C++ 程序员的数量......)。并且需要时间来学习做某些事情的最佳方法(需要指向数据数组的指针的 C 函数?只需给它 C++ 向量的第一个元素的地址,不要手动分配/构建新的数组)。

【讨论】:

    【解决方案3】:

    如果您只关心 C 和 C++ 库的互操作性。

    http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B

    是一个很好的链接。

    如果您从未做过面向对象的编程,我建议您尝试一下 C++。两者都是图灵完备的语言,没有什么 C++ 不能做 C 已经不能做的。

    【讨论】:

    • 与其说是互操作性,不如说是如何使用 C++。显然,有大量的 C 库在浮动,而且很多 C++ 无法使用......所以我想知道 C++ 程序员实际使用了多少 C(或至少是 C 库)?
    • @PeterM 就我个人而言,如果没有等效的 C++ 选择,我只会使用 c 库。我正要说libjpeg作为例子,我刚刚搜索发现现在有一个jpegxx。
    猜你喜欢
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 2020-03-05
    • 2013-02-19
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    相关资源
    最近更新 更多