运算符和返回类型是什么意思?

时间:2019-10-27 00:57:46

标签: c++ syntax operator-overloading iostream function-declaration

据我所知

istream& operator >> (istream &in, int &n);

是>>的工作方式声明(或以某种方式重载)

但是我对这个“函数的”返回类型“ istream&”感到困惑。

如果我执行cin >> x之类的操作;那意味着我要引用x,但是我不理解返回类型istream&和参数“ in”。

此函数的定义看起来像什么? “在”是什么?实际返回的是什么?因为cin >> x确实除了输入还执行任何操作,所以为什么它必须返回任何内容?

谢谢!

3 个答案:

答案 0 :(得分:2)

操作符>>的标准实现将返回对istream&in参数的引用,这意味着它返回完全相同的对象。

这是为了方便起见,因此您可以编写如下代码:cin >> x >> y;

编译器将采用运算符左侧一侧的内容,并将 first 参数和 right 放入第二。 cin >> x >> y将转换为operator>>( (operator>>(cin, x), y );

这将首先将x添加到流中,并使用返回值,流本身,并将y写入其中。

答案 1 :(得分:0)

这意味着在这种特殊情况下(以及许多其他情况),这是<通>通过。根据给定的输入返回有意义的内容是一种合同。返回is是明智之举,因为它使结构类似:

stream >> variableA >> variableB >> variableC

可能。这是因为stream >> variableA返回stream,其他操作也是如此。

答案 2 :(得分:0)

如果有功能,

istream& operator >> (istream &in, int &n);

返回

istream operator >>....

然后,事情变得复杂了。在最坏的情况下,每次>>的调用都会复制流对象并返回该副本,然后将其复制并存储在调用者的堆栈中,然后调用所有已复制内容的析构函数,特殊情况除外。

通过返回引用,我们可以做类似链接的事情:

a << b << "Yo!" << c << "Wassup?" << endl;

...没有所有的废话。

&的意思是“引用”,它本质上是具有更强大的编译时检查和更好语法的指针。