我可以在单独的源文件中将成员函数定义到类源文件吗?

时间:2016-01-09 20:32:10

标签: c++ performance member-functions

我有一个C ++类的源代码,它有许多成员函数。我正在尝试决定是否将一部分成员函数定义放在另一个源中。

如果我这样做,这是否会极大地影响程序的编译和/或执行?

2 个答案:

答案 0 :(得分:1)

这很不寻常,但是如果您在头文件中有类定义,那么您可以为成员函数定义提供多个源文件。每个源文件都包含公共头文件。例如:

// foo.hpp
struct Foo {
    void f();
    void g();
};
// foo_f.cpp
#include "foo.hpp"

void Foo::f()
{
   .
   .
   .
}
// foo_g.cpp
#include "foo.hpp"

void Foo::g()
{
   .
   .
   .
}

就影响编译时间而言,它取决于。您可以看到增量编译的改进。例如,如果您只对foo_f.cpp进行了更改,则不必重新编译foo_g.cpp。但是,如果你改变了foo.hpp,那么foo_f.cpp和foo_g.cpp都需要重新编译。

就影响执行时间而言,取决于。如果成员函数都在同一个源文件中,则某些编译器可能会进行更多优化。例如,如果f()调用g(),则如果g()在同一源文件中定义,则编译器可以将f()内联到g()。有些编译器可能不会进行此优化,但即使f()g()位于不同的文件中,某些链接器也可以执行此优化。

答案 1 :(得分:1)

您可以将实现放在您想要的任何文件中。编译源代码后,实现方法的位置无关紧要。它可能会对编译时间产生一些影响,但除非你做了一些极端的事情,比如拥有数千个成员函数,每个函数都在不同的文件中,这个效果应该可以忽略不计。