据我所知,
istream& operator >> (istream &in, int &n);
是>>的工作方式声明(或以某种方式重载)
但是我对此“函数的”返回类型“ istream&”感到困惑。
如果我做类似cin >> x;这意味着我要输入对x的引用,但我不了解返回类型istream&和参数“ in”。
此函数的定义看起来像什么? “在”是什么?实际返回的是什么?因为cin >> x确实除了输入还执行任何操作,所以为什么它必须返回任何内容?
谢谢!
操作符>>的标准实现将返回对istream&in参数的引用,这意味着它返回完全相同的对象。
这是为了方便起见,因此您可以编写如下代码:cin >> x >> y;
编译器将采用运算符left侧的内容,并将first参数放在right中,并将其放在second中。cin >> x >> y将转换为operator>>( (operator>>(cin, x), y );
这将首先将x添加到流中,并使用返回值,流本身,并在其中写入y。
如果有功能,
istream& operator >> (istream &in, int &n);
改为,返回
istream operator >>....
然后,事情变得复杂了。在最坏的情况下,每次调用>>
都会复制流对象并返回该副本,然后将其复制并存储在调用者的堆栈中,然后调用所有被复制的事物的析构函数,特殊情况下除外。
通过返回引用,我们可以完成链接等操作:
a << b << "Yo!" << c << "Wassup?" << endl;
...没有所有的废话。
&
的意思是“引用”,它实际上是具有更强编译时间检查和更好语法的指针。
这意味着在这种特殊情况下(以及许多其他情况),它是pass-thru。根据给定的输入返回有意义的内容是一种合同。返回is
是明智的,因为它使结构类似:
stream >> variableA >> variableB >> variableC
可能。这是因为stream >> variableA
返回stream
,其他操作也是如此。