10

我的计算机科学教授希望我们找到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,并且是类cout的一个实例ostream吗?

编辑:

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

4

2 回答 2

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 流相关联的对象,并包括使用这些对象所需的所有标头。

于 2012-03-11T04:24:00.840 回答
2

那是 cout 的声明吗,cout 是 ostream 类的实例吗?

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

于 2012-03-11T04:19:59.993 回答