宣布cout在哪里?

时间:2012-03-11 04:14:06

标签: c++ terminology cout ostream

我的计算机科学教授希望我们找到cout的声明。我使用g ++和-E参数编译了一个简单的Hello world程序。这是我的hello.cpp的样子:

#include <iostream>

using namespace std;

int main(){

  string name="";

  cout << "Good morning! What's your name?";

  cin >> name;

  cout << "Hello " << name << ".\n";

  return 0; 

}

我的编译命令:

g++ -E hello.cpp > hello.p

在hello.p中,我在VIM中运行了搜索,如下所示:

:/cout

我看到以下一行:

extern ostream cout;

这是cout的声明,coutostream类的实例吗?

修改

那里的wcout声明是什么?如果我没记错的话,字母“w”代表“宽”,但我不知道它有什么含义。什么是wcoutwostream

2 个答案:

答案 0 :(得分:8)

是的,这确实是在std::cout标题内找到<iostream>的声明。

相关标准部分可在§27.4.1 [iostream.objects.overview]

中找到
  

标题<iostream>简介

#include <ios>
#include <streambuf>
#include <istream>
#include <ostream>

namespace std {
  extern istream cin;
  extern ostream cout;
  extern ostream cerr;
  extern ostream clog;
  extern wistream wcin;
  extern wostream wcout;
  extern wostream wcerr;
  extern wostream wclog;
}
  

p1标头<iostream>声明将对象与<cstdio>(27.9.2)中声明的函数提供的标准C流相关联的对象,并包括使用这些对象所需的所有标头。

答案 1 :(得分:2)

  

这是cout的声明,是cout ostream类的一个实例吗?

是的,这是std::cout的声明,是的,它是std::ostream的一个实例。它被声明为extern,因此即使标题包含在多个翻译单元中,对象也只会创建一次。