“cout/cin”是什么?

16

我懂Java,现在想学C++。我不太明白cout(字符输出流)和cin(字符输入)是什么。它们是全局变量吗?那为什么在代码中没有声明?

"My message">>cout; 

无法工作?但是

cout<<"My message";

工作。


这是一个简单的描述,您可以从这里开始:http://www.cplusplus.com/reference/iostream/cin/ - Ziezi
一个简单的谷歌搜索可能会带你找到答案。 - Flare Cat
4个回答

27

coutstd::ostream 类的一个实例,是全局变量。但是,相关头文件没有声明 operator>>(char *, ostream& os);,所以 "My message">>cout; 会报错,错误信息大概是“找不到接受 const char * 和 std::ostream 参数的 >> 运算符”(有时编译器可能会因为这种事情而变得非常混乱,导致更多的错误)。

cin 也是同样的道理,只不过是 std::istream 类。

如果你真的想折磨人们,可以这样做:

template<typename T>
std::ostream& operator>>(T x, std::ostream& os)
{
   os << x;
   return os;
}

当然,对于 "My Message " >> "Some other string" >> cout; 这种写法是无效的,这也可能是为什么不这样做的原因之一。
请注意,这只是轻微滥用运算符重载的例子,我们在左侧有一个自定义类型,在右侧有标准或非标准类型。 cout 与其他自定义类型的变量没有区别。

准确无误,非常有趣,+1 - Enamul Hassan
1
更具体地说,cout是输出类的一部分,而cin是输入类的一部分。 - Flare Cat

6

std::coutstd::cin确实是全局变量。你的代码无法编译,因为这不是语言的工作方式。你必须将流放在左边,然后是操作符,然后是你要流入/流出的变量。(对于输出,你可以使用文字和表达式以及变量。)


1
将箭头视为流。 "<<"表示输出流,而">>"表示输入流。
因此,cout << "hello" 表示输出到屏幕,当cin >> a时,会要求用户输入变量a。
cout也可以使用“+”,例如,您可以将多个字符串添加到一个流中,如下所示:
cout << "Hello" << "world" << "I am john";
同样,cin也可以从多个变量请求输入:
cin >> a >> b; 将要求用户两次输入,每次一个变量。

1
是一个头文件,其中包含处理控制台输入和输出操作的类。当您在头文件中处理控制台输入操作的类时说“cin”时,就像创建了一个对象。同样,对于“cout”,也是从处理输出操作的类中创建对象。
当您考虑“cin”时,请想象创建一个与控制台和程序连接的管道,以及一个名为“cin”的对象,该对象通过键盘从控制台接收您提供的输入,并将其转储到程序中。这就是您可以看到“>>”运算符用于cin的原因,并且您可以找到与管道类似的比喻,其中运算符正在指定对象“cin”的方向。
而对于“cout”,请想象创建一个与控制台和程序连接的管道,以及一个名为“cout”的对象,该对象从程序中获取输入并将其转储到控制台上。这就是您可以看到“<<”运算符用于cout的原因,并且您可以找到与管道类似的比喻,其中运算符正在指定对象“cout”的方向。
基本上,您需要首先指定要创建的对象,然后分配运算符来完成任务。如果包含头文件,则可以在整个程序中使用这些对象。因此,“My message”>>cout;不能按照您的预期工作,因为没有对象和运算符来完成任务,而cout<<“My message”;则可以。
技术细节由Mats Petersson描述。这只是为了让您对实际发生的情况有一个概括性的了解。希望这可以帮助您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接