我想将程序中的所有类拆分为cpp和hpp文件,每个文件包含来自同一主题的几个类。像这样:
main.cpp中:
#include <cstdio>
using namespace std;
class TopicFoo_Class1 {
... (Functions, variables, public/privates, etc.)
}
class TopicFoo_Class2 {
... (Functions, variables, public/privates, etc.)
}
class TopicBar_Class1 {
... (Stuff)
}
class TopicBar_Class2 {
... (Stuff)
}
int main(int argc, const char** argv) { ... }
成:
foo.hpp:
class TopicFoo_Class1 {
... (Declarations)
}
class TopicFoo_Class2 {
... (Declarations)
}
foo.cpp:
#include <cstdio>
#include "foo.hpp"
void TopicFoo_Class1::function1 { ... }
void TopicFoo_Class2::function1 { ... }
bar.hpp:
class TopicBar_Class1 {
... (Declarations)
}
class TopicBar_Class2 {
... (Declarations)
}
bar.cpp:
#include <cstdio>
#include "bar.hpp"
void TopicBar_Class1::function1 { ... }
void TopicBar_Class2::function1 { ... }
main.cpp中:
#include "foo.hpp"
#include "bar.hpp"
int main(int argc, const char** argv) { ... }
计划是编译foo.o
和bar.o
,然后将main.cpp
与目标文件一起编译为foo_bar_executable
,而不是仅编译一个大main.cpp
进入foo_bar_executable
。
这只是一个例子,将包括标题保护和更好的名字。
cpp
将依赖于其他主题“hpp
来编译,而多个cpp
将取决于一个hpp
。cpp
个文件的多个包含相同文件会导致延迟吗?g++ main.cpp foo.cpp bar.cpp -o foo_bar_executable
? foo.hpp
包含大多数必需的包含并将其包含在大多数文件中吗?这可能会使它更快(?)答案 0 :(得分:2)
- 我想知道,这会影响程序速度吗?一些cpps将依赖于其他主题的hpps来编译,而多个cpps将依赖于一个hpp。
醇>
您正在混合影响构建速度的事物与可执行文件的运行时速度。运行时速度不应该改变。对于小型项目,构建时间的差异可以忽略不计。对于较大的项目,初始构建时间可能很长,但后续构建可能会变得更短。原因是您只需要重建已更改的内容并重新链接。
- 不同cpp文件的多个包含相同文件会导致滞后吗?
醇>
包含文件总是会在构建时添加一些增量。但这是你需要衡量的东西。如今编译器以巧妙的方式做到了这一点非常好。如果您将其与智能标头规范(标头,转发声明等中没有多余包含)以及预编译标头结合使用,则不应该看到显着的减速。
- 有没有更好的方法来分割我的代码?
醇>
取决于代码。这是非常主观的。
- 哪一个更快?
醇>
衡量你自己,我们无法为你预测。
- 是否可以运行g ++ main.cpp foo.cpp bar.cpp -o foo_bar_executable?
醇>
最后我检查了GCC文档,它是。
- 以上命令如何运作?
醇>
它将采用上述源文件并生成单个可执行文件
- 我应该让foo.hpp包含大多数必需的包含并将其包含在大多数文件中吗?这可能会使它更快(?)
醇>
我不建议这样做。包括最小值以使单行程序#include "foo.hpp"
成功编译。标题应该努力做到最小化和完整(有点像SO上的特定质量的帖子)。
答案 1 :(得分:1)
我想知道,这会影响程序速度吗?
没有
不同cpp文件的多个包含相同文件会导致滞后吗?
没有
哪一个更快?
速度对大多数程序来说并不重要,如何排列文件对运行时性能没有影响。
是否可以运行g ++ main.cpp foo.cpp bar.cpp -o foo_bar_executable
是
以上命令如何运作?
RTFM
嘿,我已经十三点半了!
我们不在乎。
答案 2 :(得分:1)
答案 3 :(得分:1)
- 我想知道,这会影响程序速度吗?
醇>
可以,但可能没有。
如果未在单个转换单元中定义函数,则编译器无法使用内联扩展优化函数调用。但是,如果启用,某些链接器可以跨翻译单元执行内联。
另一方面,您的程序可能无法从内联优化中受益。
有些cpps将取决于其他主题&#39;要编译的hpps,多个cpps将取决于一个hpp。
这与编译程序的速度无关。
- 不同cpp文件的多个包含相同文件会导致滞后吗?
醇>
它可能从头开始对编译时间产生(可能不显着)影响。
- 有没有更好的方法来分割我的代码?
醇>
这是主观的。分割代码的次数越多,进行更改时重新编译的次数就越少。分割得越少,从头开始编译整个项目的速度就越快。
- 哪一个更快?
醇>
可能都没有。
- 是否可以运行g ++ main.cpp foo.cpp bar.cpp -o foo_bar_executable?
醇>
是
- 以上命令如何运作?
醇>
使用man g++
命令。
- 我应该让foo.hpp包含大多数必需的包含并将其包含在大多数文件中吗?这可能会使它更快(?)
醇>
没有。包含不需要的文件会减慢编译速度。除此之外,这大大降低了拆分翻译单元的最大优势,即当小部件发生变化时,无需编译整个项目。