在这里,您会在哪个标题下找到以下语句?:
最后,
<iostream>
提供了八个标准的全局对象(cin、cout 等)。要正确执行此操作,此标头还提供<istream>
和<ostream>
标头的内容,但仅此而已。这个标题的内容看起来像
#include <ostream>
#include <istream>
namespace std
{
extern istream cin;
extern ostream cout;
....
// this is explained below
static ios_base::Init __foo; // not its real name
}
现在,前面提到的运行时惩罚:必须在您自己的任何代码使用它们之前初始化全局对象;这是由标准保证的。像任何其他全局对象一样,它们必须被初始化一次且仅一次。这通常通过类似上述的构造来完成,并且出于这个原因,标准中指定了嵌套类 ios_base::Init。
它是如何工作的?因为标头包含在您的任何代码之前,所以 __foo 对象在您的任何对象之前构造。(全局对象按照它们声明的顺序构建,并以相反的顺序销毁。)构造函数第一次运行时,设置了八个流对象。
<iostream>
我的问题:当我在多个文件中包含头文件时.cpp
,上面的方案如何保证对象、等只有一个定义?cin
cout