据我所知
istream& operator >> (istream &in, int &n);
是>>的工作方式声明(或以某种方式重载)
但是我对这个“函数的”返回类型“ istream&”感到困惑。
如果我执行cin >> x之类的操作;那意味着我要引用x,但是我不理解返回类型istream&和参数“ in”。
此函数的定义看起来像什么? “在”是什么?实际返回的是什么?因为cin >> x确实除了输入还执行任何操作,所以为什么它必须返回任何内容?
谢谢!
答案 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;
...没有所有的废话。
&
的意思是“引用”,它本质上是具有更强大的编译时检查和更好语法的指针。