提问人:ming 提问时间:10/27/2019 最后编辑:HoldOffHungerming 更新时间:8/7/2020 访问量:552
Operator& Return Type 是什么意思?
what does the operator& return type mean?
问:
所以据我所知,
istream& operator >> (istream &in, int &n);
是>>如何工作的声明(或以某种方式使其超载)
但我对这个“函数”的返回类型“istream&”感到困惑。
如果我做这样的事情,比如 cin >> x;这意味着我输入了对 x 的引用,但我不理解返回类型 istream & 和参数“in”。
这个函数的定义是什么样子的?什么是“在”?它实际上返回的是什么?因为 cin >> x 除了接受输入之外确实可以做任何事情,那么为什么它必须返回任何东西呢?
谢谢!
答:
这意味着在这个特定案例(以及许多其他案例)中,它是直通的。这是一个合同,用给定的输入返回一些合理的东西。返回是明智的事情,因为它可以生成以下构造:is
stream >> variableA >> variableB >> variableC
可能。这是因为返回 an 其他操作也是如此。stream >> variableA
stream
评论
return lhs;
return *this;
如果函数,
istream& operator >> (istream &in, int &n);
返回,而是,
istream operator >>....
然后,事情变得复杂了。在最坏的情况下,每次调用都会复制流对象并返回副本,然后复制副本并将其存储在调用方的堆栈中,然后调用所有被复制的东西的析构函数,特殊情况除外。>>
通过返回引用,我们可以执行链接之类的操作:
a << b << "Yo!" << c << "Wassup?" << endl;
...没有所有这些废话。
&
表示“引用”,它本质上是一个指针,具有更强的编译时检查和更好的语法。
评论
运算符 >> 的标准实现将返回对 istream &in 参数的引用,这意味着它返回完全相同的对象。
这是为了方便起见,因此您可以编写如下代码:cin >> x >> y;
编译器将获取运算符左侧的内容,并放入第一个参数,将右侧放入第二个参数。
cin >> x >> y 将翻译成operator>>( (operator>>(cin, x), y );
这将首先将 x 添加到流中,并使用返回值(流本身),并将 y 写入其中。
评论
istream
istream& operator >> (istream &in, int &n);
n
const <type>&n
cin >> x >> y
&operator
operator >>
&
&operator
& operator >> (istream &in, int &n)
&
operator >>
operator >>
istream
int