C++中的"<< / >>"运算符

3

由于谷歌搜索不接受“>>”这个搜索词,我无法在谷歌上找到任何相关信息,所以决定在这里提问。

首先,我不是指位移运算符。这是不同的。我在某些代码中看到过它的出现,如果它是一个位移运算符,那么它就没有意义。

例如:cout << a;。我知道它会输出a,但是“<<”的定义是什么?

或者在我的情况下,我有一个类似于这样的代码:

for(int index=0;index<n;index++)
    inputFile >> StringArray[index];

这是什么意思?


1
它们被称为流操作符,用于从IO流中输入或输出数据。 - Praveen
4个回答

7

位移运算符经常被重载以表示从流中读取值和写入值。

编辑:更详细地说,C++允许你重载或改变几乎任何操作符的意义。选择重载<<>>运算符来写入/读取数据源或数据汇,因为它们在视觉上看起来像箭头或导管。除了使用的操作符外,与位移位毫无共同点。


请详细解释一下。 - spurra
你熟悉运算符重载吗? - yan
@BannanaCode:有关运算符重载的更多信息:https://dev59.com/62855IYBdhLWcg3wUCWC - rozina
啊,是的,我对运算符重载很熟悉。我更加好奇的是流操作符如何与for循环结合使用。有多少内容被流式传输?当流为空时会发生什么? - spurra
@BananaCode 请查看:http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/。请注意其描述和返回值。 - yan

1

1

正如你所说,这些被称为位运算符。

然而,在C++中,你可以重载这些运算符(实际上是任何运算符),以执行你想要的操作。这就是这里发生的事情。 <<>>ostreamistream 对象中被重载,分别用于从流中打印和读取。

实际上,你可以重载任何运算符来在对象上执行任何你想要的操作。一个例子可以在 这里 找到。

干杯。

PS:这些运算符周围的概念很容易被可视化。当你写:

cout << "Hello world";

稍加想象,你可以说你把右边的字符串“放入”左边的cout流中(因此是向左的箭头)。同样地,当你写:

std::string str;
cin >> str;

你可以想象从左边的cin流中提取一个字符串,并将其“放”在右边的str变量中(因此是指向右的箭头)。

1
这是位移运算符的重载,通常称为“流操作符”。我不太清楚细节,但正如你所说,
cout<<a;

输出a的值,即将a的值放入输出流中,在屏幕上显示出来。

而在这种情况下

inputfile>>variable; 

你正在将数据从文件读入变量中。

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