[英]what does the the operator& return type mean?
所以据我所知,
istream& operator >> (istream &in, int &n);
是关于 >> 如何工作的声明(或以某种方式重载它)
但是我对这个“函数的”返回类型“istream&”感到困惑。
如果我做类似 cin >> x; 这意味着我正在引用 x,但我不理解返回类型 istream & 和参数“in”。
这个 function 看起来像什么定义的? 什么是“在”? 它实际上返回的是什么? 因为 cin >> x 除了接受输入之外确实做了任何事情,那么为什么它必须返回任何东西呢?
谢谢!
运算符 >> 的标准实现将返回对 istream &in 参数的引用,这意味着它返回完全相同的 object。
这是为了方便起见,您可以编写如下代码: cin >> x >> y;
编译器将取运算符左侧的内容并将第一个参数放入第二个参数中。 cin >> x >> y 将转换为operator>>( (operator>>(cin, x), y );
这将首先将 x 添加到 stream 并使用返回值,即 stream 本身,然后将 y 写入其中。
这意味着在这种特殊情况(以及许多其他情况)中它是一种传递。 根据给定的输入返回一些合理的东西是一个合同。 返回is
是明智之举,因为它会生成如下结构:
stream >> variableA >> variableB >> variableC
可能的。 那是因为stream >> variableA
返回stream
其他操作也是如此。
如果 function,
istream& operator >> (istream &in, int &n);
相反,返回,
istream operator >>....
然后,事情变得复杂起来。 在最坏的情况下,每次调用>>
都会复制 stream object 并返回副本,然后将其复制并存储在调用者的堆栈中,然后调用所有被复制内容的析构函数,特殊情况除外.
通过返回一个引用,我们可以做一些事情,比如链接:
a << b << "Yo!" << c << "Wassup?" << endl;
...没有所有这些废话。
&
表示“引用”,它本质上是一个具有更强编译时检查和更好语法的指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.