使用 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 << "Hello world" << std::endl;
,然后是解释。
【参考方案1】:
>>
和 <<
已被重载为流函数,例如:
std::ostream & operator << (std::ostream &, int)
(和其他人)
这样(在这种情况下)当使用 cout
它与位移无关,只是它使用相同的运算符'>'。
【讨论】:
【参考方案2】:这是运算符重载。位移位运算符为流类重载以服务于不同的目的(读取和写入流)。见:http://www.cplusplus.com/reference/ostream/ostream/operator%3C%3C/
【讨论】:
在这些情况下的目的是什么?是“cout 将输出这些东西”和“cin 将使该整数等于输入”之后的任何内容,还是发生了更具体的事情? 这几乎只是语法糖。重载的运算符也是可链接的(即它们返回流对象实例),因此您可以在链中进行一系列<<
调用。它看起来很简洁。【参考方案3】:
它们被称为流插入操作符 (<<
) 和流提取操作符 (>>
)。
这些运算符与左右位移运算符相同(尽管它们的名称不同)。移位运算符被重载,因此当左侧是流时,它们会读取或写入该流。
它们就像任何函数调用一样 - 它的工作方式如下:
leftShift(leftShift(leftShift(leftShift(cout, "You are "), age), " years old!"), endl);
除了函数被称为operator<<
而不是leftShift
。
严格来说,leftShift
函数没有理由左移,同样operator<<
函数也没有理由左移。
【讨论】:
以上是关于使用 cout 和 cin 时,“<<”和“>>”运算符是做啥的,我们为啥要使用它们?的主要内容,如果未能解决你的问题,请参考以下文章