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

问题描述

我通常使用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 ++遵循糟糕的古老构建方案。标头被复制粘贴到其他标头中,并且每次都将重建。每次重新编译每个标头时,编译时间将变得可笑。

问题2和3在C ++ 20中解决。 TS模块解决了这两个问题,有了它们,您就可以编写函数而无需像Java中那样毫无问题地拆分定义和实现。

注意:您不必拆分声明/定义。您只需要使函数inline即可,否则链接器可能会对您大喊大叫。