使用cout和cin时,"<<"和">>"运算符是做什么的?为什么我们要使用它们?

4

例如:

int age;
cin >> age;

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

我们为什么要在这里使用"<<"和">>"运算符?它们在做什么?我有点理解位移,但不知道它在这里是怎么工作的。

1
阅读任何一本关于C++的书籍,它会在第一章或前两章中向您解释一切。 - Sam Varshavchik
C++图书大全推荐 - Captain Obvlious
3
当某人就语言的某个方面有一个特定问题时,“只是去读这本书”并不是很有帮助。这个提问者明显至少了解一些 C++。如果你不知道它被称为什么(在这种情况下是运算符重载),那么你不能在 Google 或书的索引中搜索相关信息。 - Ates Goral
2
@SamVarshavchik 运算符重载_很可能不会_在前两章中解释。请尝试> 10或20。 - Ates Goral
1
任何一本值得砍树印刷的 C++ 书籍,我期望看到的第一件事是:std::cout << "Hello world" << std::endl; 并附有解释。 - Sam Varshavchik
3个回答

11

它们被称为流插入运算符<<)和流提取运算符>>)。

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

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

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

除了函数名是operator<<而不是leftShift之外,实际上没有理由让一个名为leftShift的函数执行左移操作,同样地,也没有理由让一个名为operator<<的函数执行左移操作。


4

>><<已经被重载为流函数,例如:

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

(和其他内容)

因此(在这种情况下),当使用cout << 10时,它调用重载的函数来打印该值。

它与位移操作无关,只是使用相同的运算符“<<”和“>>”。


3

在这些情况下,它们的目的是什么?除了“cout将输出这些内容”和“cin将使整数等于输入”,还有其他更具体的事情吗? - CodeMan42
1
这基本上只是语法糖。重载的运算符也是可链接的(即它们返回流对象实例),因此您可以在链中进行一系列<<调用。它看起来很简洁。 - Ates Goral

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