【问题标题】:Is it needed to put function declarations in header files and their definitions in a source files? [duplicate]是否需要将函数声明放在头文件中并将它们的定义放在源文件中? [复制]
【发布时间】:2020-09-22 21:03:32
【问题描述】:

是否需要将函数声明放在头文件中并将它们的定义放在源文件中?这样做有什么性能提升,或者可能有什么好处,而不是将声明和定义放在同一个文件中?示例:

在 Person.h 中

class Person() {
public:
    void sayHi();
}

在 Person.cpp 中

#include "Person.h"
#include <cstdio>

void Person::sayHi() {
    printf("Hello, world!\n");
}

而不是将其放在一个文件中:

#include <cstdio>

class Person {
    void sayHi() {
        printf("Hello, world!\n");
    }
}

【问题讨论】:

  • 不需要。无论哪种方式,都没有性能优势(对可执行文件)。请查看“编译单元”。
  • 您设想在您的单文件版本中使用哪个文件?它会像头文件一样,为每个使用该函数的源文件读取吗?就像源文件一样,没有其他源文件可以看到其中的内容?

标签: c++ function header-files


【解决方案1】:

如果您将定义放在 .cpp 文件中,那么您可以更改定义而无需重新编译所有其他 .cpp 文件。如果它在头文件中,那么每个包含头文件的 .cpp 文件也需要重新编译以获得新的定义。

运行时性能将完全相同。编译时间可能会有所不同,但这取决于项目的编译方式(以及编译时间差异是否明显取决于您的项目有多大)。

一般来说,我倾向于将几乎所有的定义都放在一个 .cpp 文件中。在我不科学的观点中,我觉得它鼓励只依赖接口(因为类的“用户”不一定能看到它是如何实现的)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多