我刚开始学习C++,我看到函数通常是分别声明和定义的,例如:
// Declaration
void sayhi(std::string name);
// Definition
void sayhi(std::string name) {
std::cout << "Hello, " << name;
}
我尝试搜索,但大多数问题都是关于类的情况,而我更一般的问题是,为什么我们要将它们分开?有什么好处吗?
我刚开始学习C++,我看到函数通常是分别声明和定义的,例如:
// Declaration
void sayhi(std::string name);
// Definition
void sayhi(std::string name) {
std::cout << "Hello, " << name;
}
我尝试搜索,但大多数问题都是关于类的情况,而我更一般的问题是,为什么我们要将它们分开?有什么好处吗?
为什么我们要把它们分开?
我们并不是这样做。
只要我们能够摆脱它,因为它违反了DRY,引入了(只有部分检查的)重复。
问题在于C来自于一系列单通编译器,虽然C++通过模板和返回类型推导添加了很多东西,但它并没有完全扭转这个事实。
因此,如果你想在定义之前使用一个函数,你必须提供一个前向声明。
如果你想对代码的某些部分进行分离编译,这通常是明智的,因为可以缩短编译时间并能够在其他语言中使用库(静态或非静态),而不需要源文件或以其他选项编译,那么你需要一些方式告诉编译器会有哪些内容存在。
头文件是这些前向声明、常量声明、内联函数(内联函数必须在使用它们的每个翻译单元中定义)、类型定义等的集合。
一般来说,实现文件首先包含相应的头文件以验证它们是否有效且自包含。
#include <header>
让您可以将这些内容包含在许多类中。因此,使代码更具可重用性。
.hpp
和.cpp
文件。正如我所说 - 有些代码可以移动到头文件中(就像你在回答中所说的那样),但仍然不能分离声明和定义,这似乎是问题的核心所在。 - Fureeish