前向声明、头文件和内联
Forward Declaration, Headers and inlining
我读到,在可能的情况下,最好声明一个类,而不是(在头文件中)包含它。
例如:Class A;
Class B
{
public:
B();
~B();
A* GetMyVariable();
void SetMyVariable(A* newVal);
private:
A* m_myVariable;
}
它可以很好地编译,并且可以在后续的。cpp文件中的类定义中使用。
然而,假设您现在希望使get和set函数内联(或至少向编译器建议它们是),那么代码将需要更改如下://Class A;
#include "A.h"
Class B
{
public:
B();
~B();
inline A* GetMyVariable() { return m_myVariable; }
inline void SetMyVariable(A* newVal) { m_myVariable = newVal; }
private:
A* m_myVariable;
}
所以问题是,一种方法比另一种方法好吗?为什么?我会更好地尝试通过从我的一些类中删除内联函数来尽可能多地使用类声明,还是我应该继续尝试在任何地方内联我可以?
真正的答案是,这将取决于您的项目和您的风格,因为两种方法都有优点。前向声明避免了复杂的包含关系,通常更容易让类之间相互使用,而包含可以通过将实现放在头文件中来节省代码和时间。另一个需要考虑的问题是,将模板化类的实现放在头文件中通常更容易/更需要,因此这里通常需要include。
我的建议是,如果可能的话,选择一个策略并坚持下去。我个人使用"总是包含,除非类需要相互使用并且包含创建循环"。然后,当我看到forward声明时,我就知道这两个类之间的关系。
"更好"这个词取决于你的编译器和你所遵循的风格准则。
类中的代码可以由编译器内联。也就是说,编译器可能会粘贴方法的内容,而不是生成方法并调用该方法。
内联由编译器决定。它可以内联,它可以创建一个函数,它可以优化而不是创建函数。
所以,现在决定权在作者手中。作者可能必须遵循一些编码准则来消除内联代码。有些作者更喜欢内联小方法内容。其他人可能更喜欢将所有内容放在源文件中,以防止由于头文件更改而导致构建过程大量重新编译。
做你想做的事:
- 帮助您开发健壮和正确的代码。
- 使维护更容易。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 用"=default"声明的函数应该只在头文件中执行
- 调用在 HXX 文件中声明的静态数据成员
- 如何在 c++ 的不同文件中声明类?
- 如何在头文件中声明类模板(由于循环依赖关系)
- 声明要在 qml 和 cpp 文件中使用的全局字符串
- 在.cpp文件之间传递结构声明,而不使用全局头文件
- 为什么要将函数声明和定义放在单独的文件中
- 枚举前向声明与头文件
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- 在带有类型保护的模板文件中使用前向声明
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- 在多个头文件中从接口声明被覆盖的函数时,如何避免重复代码?
- 应该在类中的文件声明为静态
- 是否应从头文件声明中排除辅助函数?(C++)
- 哪个C++头文件声明 strlen
- 如何为头文件声明“#include”以避免“error lnk2005”
- 打开文件和关闭文件声明定位:最佳做法,优点,缺点
- 说双向文件声明不隐式设置标志是否正确