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

问题描述 投票:0回答:3

据我所知,

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

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

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

如果我做类似cin >> x;这意味着我要输入对x的引用,但我不了解返回类型istream&和参数“ in”。

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

谢谢!

c++ syntax operator-overloading iostream function-declaration
3个回答
2
投票

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

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

编译器将采用运算符left侧的内容,并将first参数放在right中,并将其放在second中。cin >> x >> y将转换为operator>>( (operator>>(cin, x), y );

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


0
投票

如果有功能,

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

改为,返回

istream operator >>....

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

通过返回引用,我们可以完成链接等操作:

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

...没有所有的废话。

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


0
投票

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

stream >> variableA >> variableB >> variableC

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

© www.soinside.com 2019 - 2024. All rights reserved.