Jon*_*Jon 12 c++ header-files forward-declaration
我已经看到很多关于何时使用前向声明而不是包含头文件的解释,但是很少有人解释为什么这样做很重要.我见过的一些原因包括:
来自.net背景我发现标题管理令人沮丧.我有这种感觉我需要掌握前向声明,但到目前为止我一直在报废.
为什么编译器不能为我工作并使用一种机制(包括)找出我的依赖关系?
前向声明如何加速编译,因为在某些时候引用的对象需要编译?
我可以购买降低复杂性的论据,但这样做的实际例子是什么呢?
Cub*_*bbi 19
"掌握前瞻性声明"不是必要条件,它是可行的有用指南.
当包含头文件并且它引入更多头文件时,编译器必须在处理单个翻译模块时进行大量工作.
你可以看到多少,例如gcc -E:
单个#include <iostream>为我的g ++ 4.5.2提供额外的18,560行代码来处理.
A又#include <boost/asio.hpp>增加了74,906行.
A #include <boost/spirit/include/qi.hpp>增加154,024行,超过5 MB的代码.
这加起来,特别是如果不小心包含在项目的每个文件中包含的某个文件中.
有时候翻阅旧代码并修剪不必要的代码会因此而大大改进编译.替换包括转换模块中的前向声明,其中仅使用对某个类的引用或指针,进一步改进了这一点.