如果有一个文件foo.cpp,那么它通常有一个相关的头文件foo.h,其中包含在foo.cpp中定义的函数的所有声明。这样,使用foo.cpp中函数的所有其他文件都可以只包含foo.h文件并使用它们。这是我对头文件的简单理解。
但是,我没有看到iostream头文件和iostream类之间存在这样的关系。iostream头文件只声明了几个外部变量,但它们似乎都与iostream类直接无关。iostream类似乎也不声明任何新函数。为什么我们有iostream类和iostream头文件?如果我听起来很困惑,很抱歉,但这件事真的让我很困惑。
发布于 2011-04-19 18:22:15
标题和类之间的关系不一定是一对一的;这只是一条经验法则,通常是给新手程序员学习的。事实上,C++语言标准根本没有指定类、实现文件(翻译单位)和头之间的任何直接关系,标准库常常偏离这一规则。
std::iostream是模板类std::basic_iostream (特别是针对basic_iostream<char>)的typedef。在我的平台上,<iostream>包括定义basic_iostream的<istream>和包含typedef的<iosfwd>。
发布于 2011-04-19 18:24:07
模板是一种特例,如果您声明一个模板类或函数并在另一个文件中定义它,您就会遇到麻烦。由于C++编译器只能编译模板元素的实例化(如std::vector<int>),而不能编译它们的泛型版本(即std::vector<T>),所以它需要在实例化的任何地方都可以使用泛型版本。因此,泛型类的实现通常在其头文件中。
https://stackoverflow.com/questions/5720834
复制相似问题