我有一个C ++类的源代码,它有许多成员函数。我正在尝试决定是否将一部分成员函数定义放在另一个源中。
如果我这样做,这是否会极大地影响程序的编译和/或执行?
答案 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)
您可以将实现放在您想要的任何文件中。编译源代码后,实现方法的位置无关紧要。它可能会对编译时间产生一些影响,但除非你做了一些极端的事情,比如拥有数千个成员函数,每个函数都在不同的文件中,这个效果应该可以忽略不计。