0

我在做 C++ 相关的 Linux 工作时正在考虑这个问题。

我想问几个问题:

  1. C++ 风格的动态分配是否支持 Linux 系统调用?

    由于 C++ 使用 new/delete,在手册页中,linux 系统调用使用 C 风格的动态分配。我们可以互换使用它们还是限制将 C++ 风格的动态变量传递给 C 风格的动态变量?或者只要保持一致,就可以了?

    我希望以良好的编码风格回答(例如易于维护,易于调试)

  2. 另外,这个问题更侧重于如何使用C++开发Linux系统相关的工作?

    我是否只在需要时使用 C,否则我只是将 C++ 用于我的主要工作?或者有更好的方法来做到这一点?

  3. 在头文件中,比方说 glob.h,在 C++ 程序中,我们应该只是#include <glob.h>还是有其他方法?

我真的很想知道这个问题的行业标准是什么。

4

3 回答 3

3

1.C++风格的动态分配是否支持Linux系统调用?

由于 C++ 使用 new/delete,在手册页中,linux 系统调用使用 C 风格的动态分配。我们可以互换使用它们还是限制将 C++ 风格的动态变量传递给 C 风格的动态变量?或者只要保持一致,就可以了?

new并且delete不能安全地与和malloc混合。但是,C++ 本身可以使用,和,有时很好,但是对于正确的“对象”,它只会让你到目前为止:许多现有的 C++ 库代码硬编码使用and并且你需要处理“放置新”和自己破坏物体。您可以探索根据 and 定义您自己的和运算符- 我从未见过它完成过。典型的 C 堆函数可能针对较大的平均分配大小进行了优化,而 C++ 可能涉及大量小请求,因此可能存在性能和内存包效率方面的考虑......reallocfreemallocreallocfreenewdeletenewdeletemallocfree

我希望以良好的编码风格回答(例如易于维护,易于调试)

为了可维护性和一致性,C++ 程序倾向于最小化或消除对malloc等的使用。

2.另外,这个问题更侧重于如何使用C++开发Linux系统相关的工作?

我是否只在需要时使用 C,否则我只是将 C++ 用于我的主要工作?或者有更好的方法来做到这一点?

C++ 几乎是 C 的超集,具有一些非常好的特性,可用于编写大型、可维护和高效的程序。如果您知道如何使用它,恕我直言,您应该默认使用它。当您需要更多的可移植性,或者想要与您不能信任的其他人一起工作以明智地使用 C++ 时,请使用 C!(我是认真地说的。)

3.在头文件中,比如说glob.h,在C++程序中,我们应该只#include还是有其他方式?

是的...但是您可能希望extern "C" {在上一行和}下一行将其括起来以抑制 C++ 符号名称重整。

于 2012-08-14T05:03:22.610 回答
1

# 1. 是的

#2。

我是否只在需要时使用 c,否则我只是将 c++ 用于我的主要工作?

是的。

linux 的绝大多数特性都是由 C 接口提供的。 boost是一个很好的反例。你不会在那里找到特定于 linux 的特性,但通用特性比glibc.

# 3. 是的,你可以这样做,或者你可以考虑boost::filesystem(或类似的)。

于 2012-08-14T04:57:00.943 回答
0

IIRC(自从我在 *nix 上编写 C++ 以来大约 5 年)C++ 可以像 C 程序一样编写和编译,使用相同的 C 语法等,具体取决于编译器。我相信 gnu 编译器支持这一点。C 程序员在迁移到 C++ 时会遇到危险,因为他们编写的 C++ 程序实际上是 C 程序,但末尾带有 cpp。:D

我的意思是,当您编写 C++ 程序时,您可以调用系统函数,与调用 C++ 中的任何函数的方式几乎没有区别,因为它们只是函数调用。是负责分配内存和清理它的人(或者更确切地说,你是通过内置的 C++ 内存管理,如“new”和“destroy”或与项目关联的任何垃圾收集器。事实上,你正在调用 Linux 系统函数真的没关系。只需像调用任何可能创建的类 C 函数一样调用它们即可。

我想说用你所学的任何方式编写代码都是好的 C++ 编码风格。我认为你的担心会比你想象的要少。

于 2012-08-14T05:15:37.823 回答