Jon*_*Jon 13
取自Eric Lippert 的相关博客文章,他非常好地说:
我会问同样的问题为什么C++需要头文件?头文件似乎是一个巨大的潜在失败点; 我一直在编辑C++代码并改变方法的签名; 如果我忘记更新头文件,那么代码不会编译,并经常给出一些神秘的错误消息.希望这个巨大的成本实际上会给你带来一些东西.
它为编译器编写器买了一件东西,而用户只有一件事.
它为用户购买的是你可以独立地将每个"cpp"文件编译成一个"obj"文件,前提是你有所有必要的标题.生成给定cpp文件中的主体所需的所有信息都可以从头集合中收集.这意味着只要没有更改标头,构建系统就可以重新编译那些已更改的cpp文件.
它购买编译器编写器的原因是每个文件都可以在"一次通过"中编译.因为每个类型和方法声明在第一次使用之前都会被处理,所以编译器可以简单地从文件的顶部开始,拉入所有包含的头,然后从上到下继续,随后吐出obj文件,从来没有回过头来重温一下它已经看到过的东西.
这与诸如C#(关于博客文章)和Java之类的语言形成对比,后者是非常近亲.