почему ссылка на указатель 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);
}