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

标签 c++ function header

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

例如,在 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++ 遵循蹩脚的古老构建方案。 header 被复制粘贴到其他 header 中,并且每次都会重建。随着每个 header 一次又一次地重新编译,编译时间将上升到荒谬的数字。

问题 2 和 3 在 C++20 中得到解决。模块 TS 解决了这两个问题,使用它们,您将能够编写函数,而无需拆分定义和实现,就像在 Java 中一样,没有任何问题。

注意:您不必拆分声明/定义。您只需使函数内联,否则链接器可能会对您尖叫。

关于c++ - 为什么c++中函数的定义和声明要分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63697228/

相关文章:

c++ - 为什么我的 3d 点积在另一个方向上变黑了?

c++ - Windows 8/RT C++ 中的平台::字符串函数

C++ 在成员函数范围内使用语句

javascript - "this"对象的奇怪值

c++ - 类中没有声明成员函数 - 基本编译错误

c++ - C 与 C++ 中具有静态存储持续时间的对象的初始化

php - php 代码错误(从头开始构建 wordpress 主题)

r - 记录当前函数名称

gridview - 将类添加到标题 Yii2 GridView 中的一个单元格

php - PHP POST 请求中缺少授权 header