ostream & operator << (ostream & (* pf) (ostream &)); - PullRequest
0 голосов
/ 01 сентября 2018

Моя проблема в том, чтобы понять (ostream& (*pf)(ostream&))

  1. почему ссылка на указатель pf? В моем понимании необходим для выделения
  2. почему второй (ostream &)?

Я нашел его, когда читал о перегрузке операторов.

Спасибо Уве

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

почему ссылка на указатель pf? В моем понимании необходим для выделения

Это неверное понимание. pf - указатель на функцию. Тип возвращаемого значения std::ostream&, а единственным аргументом также является std::ostream&.

почему второй (ostream &)?

Функция вызывается с использованием объекта ostream, который передается по ссылке. Функция возвращает ссылку на тот же объект.

Давайте посмотрим на звонок.

std::cout << std::endl;

Это переводится как:

std::cout.operator<<(std::endl);

std::ostream::operator<<(std::ostream& (*pf)(std::ostream&) может быть реализовано просто как:

std::ostream& std::ostream::operator<<(std::ostream& (*pf)(std::ostream& str)
{
   return pf(str);
} 
0 голосов
/ 01 сентября 2018

pf является указателем на функцию (единственный аргумент и возвращаемое значение которого являются ссылкой на ostream), а не ссылкой на что-либо.

Используется для реализации манипуляторов , таких как endl.

...