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