что означает оператор и тип возвращаемого значения? - PullRequest
0 голосов
/ 27 октября 2019

Итак, насколько мне известно,

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

является декларацией того, как >> работает (или каким-то образом перегрузить его)

Но я запутался в этой "функции"тип возврата "istream &".

Если я сделаю что-то вроде cin >> x;это означает, что я вставляю ссылку на x, но я не понимаю тип возвращаемого значения istream & и параметр "in".

Как бы выглядела эта функция, как определено? что в"? И что это на самом деле ВОЗВРАЩЕНИЕ? Потому что cin >> x действительно что-то делает, но принимает входные данные, так почему он должен что-либо возвращать?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 27 октября 2019

Стандартная реализация оператора >> возвращает ссылку на параметр istream & in, что означает, что он возвращает точно такой же объект.

Это для удобства, поэтому вы можете написать код, подобный: cin >> x >> y;

Компилятор возьмет то, что находится на левой стороне оператора, и введет параметр first и right во second. cin >> x >> y преобразуется в operator>>( (operator>>(cin, x), y );

Сначала он добавит x к потоку и будет использовать возврат, сам поток и записать в него y.

0 голосов
/ 27 октября 2019

Если функция,

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

вернулась, вместо этого,

istream operator >>....

Тогда все усложняется. В худшем случае каждый вызов >> будет копировать объект потока и возвращать копию, которая затем будет скопирована и сохранена в стеке вызывающего, а затем вызовет деструкторы всех тех вещей, которые были скопированы, особые обстоятельстваисключено.

Возвращая ссылку, мы можем сделать что-то вроде цепочки:

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

... без всей этой ерунды.

& означает «ссылка", который по сути является указателем с более строгой проверкой во время компиляции и более приятным синтаксисом.

0 голосов
/ 27 октября 2019

Это означает, что это pass-thru в этом частном случае (и многих других). Это контракт на возвращение чего-то разумного с заданным вкладом. Возврат is - разумная вещь, поскольку он делает возможными конструкции типа:

stream >> variableA >> variableB >> variableC

. Это потому, что stream >> variableA возвращает stream, как и другие операции.

...