2015-12-20 243 views
12

我知道Java,现在想学习C++。我不明白cout(字符输出流)和cin(字符输入)是什么。这些全局变量是什么?那为什么cout/cin究竟是什么?

"My message">>cout; 

不行?但是

cout<<"My message"; 

的作品。

+0

下面是一个简单的说明,您可以从下面开始:http://www.cplusplus.com/reference/iostream/cin/ – Ziezi

+0

简单的谷歌搜索可能会导致您的答案。 –

回答

22

cout是类std::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与自定义类型的其他变量没有区别。

+0

准确,非常有趣,+1 – manetsus

+1

更具体地说,cout是输出类的一部分,cin是输入类的一部分。 EX: 'std :: string str; std :: cout <<“输入一个值:”;给std :: cin >>海峡; std :: cout <<“您输入了”<< str << std :: endl;' –

1

将箭头视为流。 < <代表输出流,而>>代表输入流。

所以COUT < <“你好”是指输出到屏幕 CIN当>>的装置从用于可变的用户输入一个

COUT也可以用“+”等,例如可以添加更多的字符串要求一个流这样

COUT < < “你好” < < “世界” < < “我是约翰”;

CIN以同样的方式可以从多个变量

CIN >> A >> B要求输入;将要求用户输入两次,每个变量一个

6

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

1

iostream是一个头文件,它包含处理控制台输入和输出操作的类。它就像你创建一个对象,当你说输入类处理头文件中控制台的输入操作时输入“cin”。同样可以说关于“cout”,其中一个对象正在从一个处理输出操作的类创建到头文件中的控制台。

当你考虑“cin”时,设想创建一个连接到控制台和你的程序的管道和一个对象“cin”,从控制台输入你通过键盘提供的输入并将它们转储到程序中。这就是您可以看到为cin设置“>>”运算符的原因,并且您可以找到操作员正在执行指定对象“cin”方向的管道的类比。

对于“cout”,想象一下创建一个连接到控制台和你的程序的管道和一个从程序中获取输入并将它们输入到控制台的对象“cout”。这就是您可以看到为cout设置“< <”运算符的原因,并且您可以找到操作员正在执行指定对象“cout”方向的管道的类比。

所以基本上你需要先指定你将为你的操作创建什么对象,然后指定一个操作员来完成你的任务。如果你包含头文件,那么就像你可以在整个程序中的任何地方使用这些对象一样。

所以,“我的信息”>> cout;不会按照您期望的方式运行,因为没有任何对象和操作员来完成您的任务,而cout < <“我的信息”;确实。

Mats Petersson描述了技术方面。这只是为了给你一个关于实际发生的事情的概述。希望这可以帮助你。