使用 cout 和 cin 时,“<<”和“>>”运算符是做啥的,我们为啥要使用它们?

Posted

技术标签:

【中文标题】使用 cout 和 cin 时,“<<”和“>>”运算符是做啥的,我们为啥要使用它们?【英文标题】:When using cout and cin, what are the "<<" and ">>" operators doing and why do we use them?使用 cout 和 cin 时,“<<”和“>>”运算符是做什么的,我们为什么要使用它们? 【发布时间】:2016-09-22 10:01:01 【问题描述】:

例如:

int age;
cin >> age;

cout << "You are " << age << " years old!" << endl;

为什么我们在这里使用“>”运算符?他们在做什么?我有点理解位移,但我不明白它是如何工作的。

【问题讨论】:

阅读任何有关 C++ 的书籍。它将在第一章或两章中向您解释一切。 Great list of C++ books. 当他们对语言的一个方面有特定的问题时,告诉他们“去读这本书”是没有帮助的。 OP 清楚地知道至少 some C++。当您不知道它叫什么时(在这种情况下是运算符重载),您无法在 Google 或图书索引中搜索。 @SamVarshavchik 运算符重载很可能不会在第一章或第二章中解释。尝试 > 10 或 20。 我希望在任何 C++ 书籍中看到的第一件事就是:std::cout &lt;&lt; "Hello world" &lt;&lt; std::endl;,然后是解释。 【参考方案1】:

&gt;&gt;&lt;&lt; 已被重载为流函数,例如:

std::ostream & operator << (std::ostream &, int) 

(和其他人)

这样(在这种情况下)当使用 cout

它与位移无关,只是它使用相同的运算符'>'。

【讨论】:

【参考方案2】:

这是运算符重载。位移位运算符为流类重载以服务于不同的目的(读取和写入流)。见:http://www.cplusplus.com/reference/ostream/ostream/operator%3C%3C/

【讨论】:

在这些情况下的目的是什么?是“cout 将输出这些东西”和“cin 将使该整数等于输入”之后的任何内容,还是发生了更具体的事情? 这几乎只是语法糖。重载的运算符也是可链接的(即它们返回流对象实例),因此您可以在链中进行一系列 &lt;&lt; 调用。它看起来很简洁。【参考方案3】:

它们被称为流插入操作符 (&lt;&lt;) 和流提取操作符 (&gt;&gt;)。

这些运算符与左右位移运算符相同(尽管它们的名称不同)。移位运算符被重载,因此当左侧是流时,它们会读取或写入该流。

它们就像任何函数调用一样 - 它的工作方式如下:

leftShift(leftShift(leftShift(leftShift(cout, "You are "), age), " years old!"), endl);

除了函数被称为operator&lt;&lt; 而不是leftShift。 严格来说,leftShift 函数没有理由左移,同样operator&lt;&lt; 函数也没有理由左移。

【讨论】:

以上是关于使用 cout 和 cin 时,“<<”和“>>”运算符是做啥的,我们为啥要使用它们?的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中使用 cout 递增和递减 [重复]

打印 cout << 时的 C++ 对齐

C++创建派生类对象时,调用构造函数顺序

为啥我用vs2010编c++程序时,用“cout”“cin”时,调试时说“cout”“cin”是未声明的标识符?

使用具有自己功能的 << 运算符来“覆盖” cout

为啥 cout 和 cin 使用按位移位(<< 和 >>)?