100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 为什么c++要“在头文件中声明 在源文件中定义”?

为什么c++要“在头文件中声明 在源文件中定义”?

时间:2023-04-28 23:24:52

相关推荐

为什么c++要“在头文件中声明 在源文件中定义”?

>>> 搬运一个知乎问答

===================下面是回答===================

答1、

然后问题来了:假如你这个函数到处都要用到,你总不能每个cpp里贴上这么一行吧。

答案自然就是把它放在头文件里咯。这就是你书里那句话的意思。

答2、

要从几个部分解释一下。

第一,预编译指令#include的作用是将所包含的文件全文复制到#include的位置,相当于是个展开为一个文件的宏。

第二,C++允许多次声明,但只允许一次实现。比如int foo();就是一次声明,而int foo(){}就是一次实现。

如果编译时有多个.cpp文件中#include了同一个含有函数实现的.h,这时候链接器就会在多个目标文件中找到这个函数的实现,而这在C++中是不允许的,此时就会引爆LNK1169错误:找到一个或多个重定义的符号。

因此为了让函数可以在各个.cpp中共享,正确的做法就是在.h中只声明函数,并在另【 一个(重点)】.cpp中实现这个函数。这样就不会冲突了。

作者:耶伦奶奶

链接:/question/58547318/answer/157444718

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

答3、

碰巧最近也在研究这个问题,来说说自己的一点见解(纯属个人体会)

1.便于查找使用。在一个项目中,会涉及到许多函数,定义与声明分开可以更快的找到所需要的函数(别说看文档,效率太低),同时定义可能需要成千上万行代码,而声明只需要几十行,这意味着等待代码载入的时间大大缩短了。(这一点感触最深刻,10MB+的源代码,在手机上载入直接未响应,自此我彻底认同这种做法了。)

2.为闭源提供方便。只提供接口,不提供函数具体定义。

3.便于团队合作,每个人只用关心自己负责的部分即可,写完后提供接口,别人直接用就好了。

4.同一个声明,可以换上不同的定义(编译时选择不同的文件),便于快速比较算法性能等神奇的用法。

同时如果关键参数也在放在小巧的头文件中,意味着改参数再也不用等上个数分钟加载庞大的源文件,不用从数千个函数中寻找数百个参数中的某几个参数。

以上都是我最近几天体会出来的,不保证一定对,如果有误,请多多指教,感激不尽。

作者:知乎用户

链接:/question/58547318/answer/157458441

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。