前瞻宣言,标题和内联

时间:2014-07-25 17:07:24

标签: c++ inline header-files

我已经读过,在可能的情况下,最好是声明一个类而不是包含它(在头文件中)。

例如:

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;
}

所以问题是,一种方法比另一种方法更好,为什么?通过从我的某些类中删除内联函数,我是否可以更好地尝试使用类声明,或者我应该继续尝试内联到哪里?

2 个答案:

答案 0 :(得分:2)

真正的答案是,它取决于你的项目和风格,因为无论哪种方式都有优势。前向声明避免了复杂的包含关系,并且通常更容易让类互相使用,而包含可以通过将实现放在标题中来节省代码和时间。另一个考虑因素是,将标题化的类的实现放在标题中通常更容易/需要,因此在那里通常需要包含。

我的建议是尽可能选择使用并坚持使用的政策。我个人使用"总是包含,除非类需要互相使用并包括创建一个循环。"然后,当我看到前进声明时,我知道这两个类的关系。

答案 1 :(得分:1)

术语“更好”取决于您的编译器和您遵循的样式指南。

类中的代码可能由编译器内联。也就是说,编译器可以粘贴方法的内容而不是生成方法并调用该方法。

内联决定取决于编译器。它可以内联,它可以创建一个函数,它可以优化而不是创建函数。

所以,这个决定现在掌握在作者手中。作者可能必须遵循一些驱逐内联代码的编码指南。一些作者更喜欢内联小方法内容。其他人可能更喜欢将所有内容放在源文件中,以防止构建过程大量重新编译,因为头文件已更改。

按照你的想法行事:

  1. 帮助您开发健壮且正确的代码。
  2. 使维护更容易。