gpt4 book ai didi

C++ 包含 header 约定

转载 作者:可可西里 更新时间:2023-11-01 17:08:36 25 4
gpt4 key购买 nike

假设我有一个文件 X.h,它定义了一个类 X,其方法在 X.cc 中实现。文件X.h包含一个文件Y.h,因为它需要Y来定义类X。在X.cc中,我们可以引用到 Y,因为 X.h 已经包含 Y.h。我还应该在 X.cc 中包含 Y.h 吗?

我知道我不需要,我可以依靠标题保护来防止多重包含。但一方面,包含 Y.h 使 X.cc 更独立于 X.h(不能当然完全独立)。公认的做法是什么?

另一个例子:包括<iostream>在 .h 和 .cc 文件中。我看到有些人这样做而有些则没有。

最佳答案

最小化。在 header 中,更喜欢前向声明而不是完整定义。例如,使用 iosfwd 而不是 ostream

也就是说,X.h 和 X.cc 代表相同的逻辑单元。如果您对 Y.h 的依赖性发生了变化(例如,将其变成前向声明),您无论如何都会更改类。所以你可以合理地将#include "Y.h"移动到X.cc。

换句话说,X.cc 和 X.h 齐头并进。 X.cc 可以可靠地假定 X.h 中的内容。因此,如果 X.h 需要,则无需重新包含某些内容。

您“无论如何都包含它”的依赖项发生在您自己的资源之外。。例如,如果您需要 Z.h,即使 Y.h 需要,您也会包含它。 X.h 不能可靠地假定 Y.h 的内容,因为 X.h 不与 Y.h 一起使用,它使用它。

关于C++ 包含 header 约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2555173/

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