iostream标题与iostream类

时间:2011-04-19 18:20:54

标签: c++ iostream

如果有一个文件foo.cpp,那么它通常有一个关联的头文件foo.h,其中包含foo.cpp中定义的函数的所有声明。这样,使用foo.cpp中的函数的所有其他文件都可以包含foo.h文件并使用它们。这是我对头文件的简单理解。


但是,我没有在iostream头文件和iostream类之间看到这样的关系。 iostream头文件只声明了一些外部变量,但它们似乎都没有直接与iostream类有任何关系。 iostream类似乎也没有声明任何新函数。为什么我们有iostream类和iostream头文件?抱歉,如果我听起来很困惑,但这些东西真让我困惑。

2 个答案:

答案 0 :(得分:1)

标题和类之间的关系不一定是一对一的;这只是一个经验教训,经常教给新手程序员。事实上,C ++语言标准没有指定类,实现文件(翻译单元)和标题之间的任何直接关系,标准库通常偏离此规则。

std::iostream是模板类std::basic_iostream的typedef(特别是basic_iostream<char>)。在我的平台上,<iostream>包含定义<istream>的{​​{1}},以及包含basic_iostream的{​​{1}}。

答案 1 :(得分:0)

模板是一种特殊情况,如果您声明模板化的类或函数并在另一个文件中定义它,则会遇到麻烦。由于C ++编译器只能编译模板化元素(如std::vector<int>)的实例化而不是它们的通用版本(即std::vector<T>),因此需要在实例化的任何地方都使用通用版本。因此,泛型类的实现通常在其头文件中。