问题描述
我通常使用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个原因:
-
必须先声明函数,然后才能对其进行调用。因此,如果您有
fun1()
调用fun2()
,反之亦然,则无法在声明时为每个函数编写实现。 -
隐藏依赖项。如果实现依赖于某些包含,并且您不想要求函数的每个用户都包含它-那么您必须拆分声明和实现。
-
C ++遵循糟糕的古老构建方案。标头被复制粘贴到其他标头中,并且每次都将重建。每次重新编译每个标头时,编译时间将变得可笑。
问题2和3在C ++ 20中解决。 TS模块解决了这两个问题,有了它们,您就可以编写函数而无需像Java中那样毫无问题地拆分定义和实现。
注意:您不必拆分声明/定义。您只需要使函数inline
即可,否则链接器可能会对您大喊大叫。