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

>>> 搬运一个知乎问答

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

答1、

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

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

答2、

要从几个部分解释一下。

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

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

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

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

作者:耶伦奶奶
链接:https://www.zhihu.com/question/58547318/answer/157444718
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

答3、

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

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

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

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

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

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

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


作者:知乎用户
链接:https://www.zhihu.com/question/58547318/answer/157458441
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值