`std::cout` 和 `std::ostream` 之间有什么关系?

Joh*_*ohn -1 c++ c++11

我在某处看到了下面的代码片段

#include <iostream>


int main()
{
    std::ostream& os = std::cout;

    os << "thanks a lot" << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

由于上述代码片段运行良好,因此表明它std::cout源自std::ostream. 但我还找不到任何直接的参考。

根据文件,其中说[强调我的]:

全局对象 std::cout 和 std::wcout控制输出到实现定义类型(派生自 std::streambuf)的流缓冲区,与标准 C 输出流 stdout 关联。

上面的引用说控制输出到派生自其他std::cout类型而不是派生自 的类型。std::streambufstd::coutstd::streambuf

std::cout我只在名为 的文件中找到 的声明/usr/include/c++/7/iostream

  extern ostream cout;      /// Linked to standard output
Run Code Online (Sandbox Code Playgroud)

我找不到 的实现std::cout

mea*_*gar 5

ostream是一个类。cout是该类的一个实例。

这与 没有什么不同class Person {}; Person john;Person是类,john是该类的实例。coutC++ 标准库恰好提前创建了该特定类 () 的实例 ( ostream),并配置为写入标准输出流。

该行std::ostream& os = std::cout;定义了一个名为 的新变量os,其类型为ostream&,是对 的引用ostream。然后它使其成为对已定义变量的引用cout