我已经读过,在可能的情况下,最好是声明一个类而不是包含它(在头文件中)。
例如:
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;
}
所以问题是,一种方法比另一种方法更好,为什么?通过从我的某些类中删除内联函数,我是否可以更好地尝试使用类声明,或者我应该继续尝试内联到哪里?
答案 0 :(得分:2)
真正的答案是,它取决于你的项目和风格,因为无论哪种方式都有优势。前向声明避免了复杂的包含关系,并且通常更容易让类互相使用,而包含可以通过将实现放在标题中来节省代码和时间。另一个考虑因素是,将标题化的类的实现放在标题中通常更容易/需要,因此在那里通常需要包含。
我的建议是尽可能选择使用并坚持使用的政策。我个人使用"总是包含,除非类需要互相使用并包括创建一个循环。"然后,当我看到前进声明时,我知道这两个类的关系。
答案 1 :(得分:1)
术语“更好”取决于您的编译器和您遵循的样式指南。
类中的代码可能由编译器内联。也就是说,编译器可以粘贴方法的内容而不是生成方法并调用该方法。
内联决定取决于编译器。它可以内联,它可以创建一个函数,它可以优化而不是创建函数。
所以,这个决定现在掌握在作者手中。作者可能必须遵循一些驱逐内联代码的编码指南。一些作者更喜欢内联小方法内容。其他人可能更喜欢将所有内容放在源文件中,以防止构建过程大量重新编译,因为头文件已更改。
按照你的想法行事: