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

标签: c++ operators bit-manipulation iostream


【解决方案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; 函数也没有理由左移。

    【讨论】:

      猜你喜欢
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多