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

Can I define a member function in a seperate source file to the class source file?

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

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

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

// 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() 是在同一源文件中定义的,则编译器可以将 g() 内联到 f() 中。一些编译器可能不会进行这种优化,但一些链接器可能能够进行这种优化,即使 f()g() 在不同的文件中。

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