为什么要拆分c++中函数的定义和声明?

Why do you split the definition and declaration of functions in c++?

我通常在 Java 中编写代码,但我已经开始学习 C++,因为我正在尝试参加一些有竞争力的编程。现在让我感到困惑的是,在 java 中,您可以在 class 中声明一个方法,使其成为 public,仅此而已。

例如,在Java中:

public class Main{
    public int javamethod(int myNum){
        return myNum;
    }
}

而在 C++ 中,您将函数声明和定义拆分到不同的文件中(如 cprogram.hpp 和 cprogram.cpp)。这不是多余和重复的吗?这到底是什么意思?

C++ 示例(头文件)

int cppfunc(int myNum);

(cpp 文件)

int cppfunc(int myNum){
    return myNum;
}

有3个原因:

  1. 函数必须在调用前声明。因此,如果您有 fun1() 调用 fun2(),反之亦然,您不能在声明时为每个代码编写实现。

  2. 隐藏依赖项。如果实现依赖于某些包含并且您不想要求函数的每个用户都包含它 - 那么您必须拆分声明和实现。

  3. C++ 遵循蹩脚的古老构建方案。 Headers 被复制粘贴到其他 header 并且每次都重建。随着每个 header 被一次又一次地重新编译,编译时间将上升到荒谬的数字。

问题 2 和 3 在 C++20 中得到解决。 Modules TS 解决了这两个问题,有了它们,您将能够在不拆分定义和实现的情况下编写函数,就像在 Java 中一样没有任何问题。

注意:您不必拆分声明/定义。你只需要创建函数 inline 否则链接器可能会对你尖叫。