![]() |
1
3
在C和C++中,编译的最小单位是文件。如果不使用头文件并将所有内容都包含在“主”文件中,那么每次更改某些内容时,都必须重新编译整个程序。对于更大的应用程序,这可能是分离头和实现的一个很好的理由。另外,如果应用程序的另一部分位于另一个二进制可执行文件中,并且您不想重用类,那么您可以安全地使用头文件,而没有头文件的话,您将获得大量开销。 如果你不关心这些事情(你会后悔的),就不需要单独的头文件了。 关于内联:无论如何,编译器将内联许多函数(有时甚至是整个类,可以这么说),即使您不要求它这样做。内联通常对性能有利。有一些角情况(大量的可执行文件可以在较慢的执行速度下解析),但这些情况非常罕见。 |
![]() |
2
3
这真是两个问题。 现在,上面显示的“hello.cpp”看起来像一个头部,带有一个include保护。编译器并不真正关心你给头起什么名字,但是包含一个.cpp文件对任何查看你的代码的人来说都是混淆的(最多)。如果您自己编译它,那么include-guard(至少)应该会消失——虽然它不会造成真正的问题,但它至多是无意义和混乱的。 是的,在类定义中定义的成员函数是隐式内联的。但这并不意味着编译器需要为它们生成内联代码。这基本上只是对编译器的一个提示,大多数编译器自己决定是否生成内联代码,主要基于函数包含的内容,而不是函数的定义位置。 |
![]() |
3
2
头文件的目的是封装应用程序视为 美国石油学会 . 在许多情况下,对应的源文件位于单个库文件中,或者至少位于独立的包中。直接将源代码(作为单独的文件)组合到项目中是有利的,通常有助于开发,而不是构建库并将其链接到中。 像这样的话 包裹 , 图书馆 和 美国石油学会 充满了交替的技术含义,证明了开发人员对这种安排的重要性。
如果你认为你所写的类将来会有一些重用,那么把它们分开并不是一个坏习惯。
|
![]() |
4
1
“在罗马的时候要像罗马人那样做” 你被欺骗以为你可以选择使用像Java一样的C++。虽然这在技术上是正确的,但是您违背了一些出于某种原因而存在的非常强的约定。你可以很容易地开始使用new而不调用delete,因为“这不是什么大事”,或者“你的程序很小”,或者“操作系统会在程序关闭后回收所有内存”,但这并不意味着你应该这样做。我同意C++比Java更复杂,这可能是一个真正的痛苦,但这是你必须处理的事情。这是每个C++开发人员迟早接受的。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 5 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 5 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 5 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 5 月前 |