|
|
1
239
你的同事错了,常见的方法是,而且一直是,将代码放在.cpp文件(或你喜欢的任何扩展名)中,并在头文件中声明。
最后,当所有代码都是头时,循环对象关系(有时是需要的)通常很烦人。
编辑: 我一直在思考你的问题。有 一 他说的是真的。模板。许多较新的“现代”库,如boost,大量使用模板,并且通常是“仅限头部”的。但是,只有在处理模板时才应该这样做,因为这是处理模板时的唯一方法。 编辑: 如果你四处搜索,你会看到很多人试图在处理boost时找到一种减少编译时间的方法。例如: How to reduce compilation times with Boost Asio ,它看到了一个包含boost的1K文件的14s编译。14秒可能看起来并没有“爆炸”,但它肯定比典型的要长得多,在处理大型项目时可以很快加起来。仅头文件库确实以一种相当可衡量的方式影响编译时间。我们之所以容忍它,是因为助推非常有用。 注: 最后一点,当使用boost作为纯头代码的示例时,常常会遗漏一个巨大的细节。
|
|
|
2
181
C++程序员达成一致的那一天 路 目前,.h和.cpp文件之间的分隔大多是任意的,这是很久以前编译器优化的残余。在我看来,声明属于头文件,定义属于实现文件。但是,这只是习惯,不是宗教。 |
|
|
3
33
头文件中的代码通常是一个坏主意,因为当您更改实际代码而不是声明时,它会强制重新编译包含头文件的所有文件。它还会减慢编译速度,因为您需要解析包含标头的每个文件中的代码。 在头文件中包含代码的一个原因是,通常需要内联关键字才能正常工作,并且在使用其他cpp文件中实例化的模板时也需要内联关键字。 |
|
|
4
24
|
|
|
5
14
我认为你的同事很聪明,你也是对的。
|
|
|
6
12
|
|
7
7
正如Tuomas所说,你的头球应该尽量小。为了完整,我将稍作扩展。
我个人使用4种类型的文件
此外,我还将此与另一条规则结合起来:不要定义你可以转发声明的内容。当然,我在这方面是讲道理的(到处使用Pimpl都很麻烦)。
最后,我还使用了可见性规则:我尽可能地限制符号的范围,这样它们就不会污染外部范围。 总而言之:
这里的救命稻草是,大多数时候,前向头球是无用的:只有在以下情况下才有必要
|
|
|
8
6
正常代码 |
|
|
9
6
|
|
10
5
我个人在头文件中这样做:
我不会将所有方法都放在头文件中。编译器(通常)不能内联虚拟方法,并且(可能)只内联没有循环的小方法(完全取决于编译器)。
|
|
|
11
4
我认为将所有函数定义放在头文件中是绝对荒谬的。为什么?因为头文件用作类的PUBLIC接口。这是“黑匣子”的外部。 当你需要查看一个类来参考如何使用它时,你应该查看头文件。头文件应该给出它可以做什么的列表(注释以描述如何使用每个函数的详细信息),并且它应该包括成员变量的列表。它不应该包括每个单独函数的实现方式,因为这是一堆不必要的信息,只会使头文件变得混乱。 |
|
|
12
4
|
|
|
13
2
依我之见,他只有在做模板和/或元编程时才有价值。前面已经提到了很多将头文件限制为仅声明的原因。他们就是这样。..标题。如果你想包含代码,你可以将其编译为库并链接起来。 |
|
|
14
2
我把所有的实现都从类定义中去掉了。我想把doxygen注释从类定义中去掉。 |
|
|
15
1
这真的不取决于系统的复杂性和内部惯例吗? 目前,我正在开发一个非常复杂的神经网络模拟器,我希望使用的公认风格是:
这将用户构建的模拟与开发人员构建的基类分开,在这种情况下效果最佳。 然而,如果人们在图形应用程序或任何其他不为用户提供代码库的应用程序中这样做,我会感到惊讶。 |
|
|
16
0
|
|
|
17
0
我认为你的同事是对的,只要他不参与在头部编写可执行代码的过程。
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |