gpt4 book ai didi

c++ - 为什么 C++ 头函数放在一个单独的文件中?

转载 作者:行者123 更新时间:2023-11-28 00:01:08 25 4
gpt4 key购买 nike

我正在学习 C++ 教程,在一篇关于预处理器/头文件的文章中,作者创建了 2 个“头文件”(当然不是技术术语),example.h 和 example。 cpp。在 example.h 中,他放置了函数的前向声明和标题保护,在 example.cpp 中放置了函数的实际主体。为什么是这样?我试过把函数体放在example.h文件里,效果很好,那他为什么要单独放呢?是习以为常,还是在更大的问题中造成问题?或者什么?

谁能请教我这...

最佳答案

C++ 有一个叫做一次定义规则的规则,它说每个函数都需要定义一次且只需要一次(这条规则有一些异常(exception),但我们将忽略它们现在。)通常包含在头文件中的函数原型(prototype)是一个声明,说明该函数存在,而 .cpp 文件中的实现是定义,为函数。

如果您将函数的定义放在一个头文件中,然后在多个地方包含该头文件,您将遇到链接器错误,因为您违反了一个定义规则 - 每个编译的 .cpp 文件都会有它的自己的函数定义拷贝。另一方面,如果您只是将声明放在 header 中,然后将定义放在单个源文件中,那么只有一个定义,不会破坏任何内容。

单一定义规则有一些异常(exception)情况。首先,所有内联函数都免于 ODR,因此如果您将所有函数都标记为 inline,则可以将函数定义放在头文件中,尽管这通常被认为不是一个好主意,除了最小的功能。其次,模板函数不受 ODR 的约束,这(除其他事项外)是您在 header 中看到模板函数定义的原因之一。

关于c++ - 为什么 C++ 头函数放在一个单独的文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38860642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com