C++中的头文件如何允许更快的编译
How do header files in C++ allow for faster compilation?
我知道在C++中拥有头文件的目的是将接口与实现分离。换句话说,我们在实现文件和头文件之间指定了一个约定,即它必须写入头文件中函数签名的规范,如果不这样做,就会引发编译器错误。
然而,我不明白这是使编译更快还是只是减少了开发时间?对我们的函数进行前向声明并让编译器捕捉我们在定义中犯下的任何错误是有意义的(例如,我们在实现文件的函数中的参数数量与头中指定的参数数量不同(。因此,在编译时而不是运行时发现这些错误肯定有助于开发时间。
在较低的级别上,通过包含我们自己的头文件,在编译时有什么优势吗?
编辑:好吧,如果编译时间没有优势,为什么除了接口和实现的分离之外,我们还有头文件?
考虑我们只有实现文件而没有头文件。然后,当我们必须使用特定的类/函数时,我们必须将完整的实现包含到该文件中,这最终会多次编译完整的实现,从而最终增加编译时间。
但是,当我们只包含声明时,我们只需要多次编译声明,这样成本更低。
此外,必须记住,我们甚至应该只在实际需要的地方包含头文件。永远不会在哪里。
拥有头文件的其他优点:在dlls/libs的情况下,我们已经编译了实现,头文件是了解库中可用类/函数详细信息的良好来源。
相关文章:
- 二叉排序树无法编译
- 编译时未启用intel oneApi CUDA支持
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- std::less是否应该允许在编译时比较不相关的指针?
- C++中的头文件如何允许更快的编译
- 不允许调用 gil 要求函数,否则 gil 编译错误与 C++
- 从"常量字符*"到"字符*"[-允许]的转换无效;VTK-7.1.1 编译错误
- 是否允许在模板专用化时从int转换为long(应该编译此代码)
- 为什么和如何C++允许使用动态值创建编译时数组
- 为什么允许在Visual Studio 2013下编译此代码
- gitignore 允许 obj 模型,但不允许编译 obj 文件
- 为什么VC++ 2010允许编译
- Visual Studio 2015是否允许使用GCC编译普通C++项目
- C++:编译时和运行时不允许派生类中的虚拟函数
- QT允许使用MinGW(预编译)进行交叉编译
- 允许运行时和编译时多态性的灵活方式
- 定义赋值运算符 = 只允许零 RHS,否则无法编译
- 为什么C++允许在具有指针成员的类中编译默认的复制构造函数/赋值运算符重载
- CUDA C编译错误:全局函数中不允许使用new操作符